首页 > 代码库 > Effective Java读书笔记(4 类和接口)

Effective Java读书笔记(4 类和接口)

4.1 使类和成员的可访问性最小化

要区别设计良好的模块和设计不好的模块,最重要的因素在于,这个模块对于外部的其他模块而言,是否隐藏其内部数据和其他实现细节。设计良好的模块会隐藏所有的实现细节,把它的API与它的实现清晰的隔离开来,然后模块之间只通过API进行通信,一个模块不需要知道其他模块内部的工作情况,这个概念被称为信息隐藏或封装,是软件设计的基本原则之一。


4.2 在公有类中使用访问方法而非公有域

坚持面向对象程序设计思想:如果类可以在它所在的包的外部进行访问,就提供访问方法,以保留将来改变该类的内部信息表示法的灵活性。


4.3 使可变性最小化

不可变类只是其实例不能被修改的类。

存在不可变类有许多理由:不可变类比可变类更加易于设计、实现和使用。它们不容易出错,且更加安全。

为了使类变成不可变,要遵循下面五条规则:

(1)不要提供任何会修改对象状态的方法;

(2)保证类不会被扩展;为了防止子类化,一般做法是使这个类称为final的。

(3)使所有的域都是final的;

(4)使所有的域都成为私有的;

(5)确保对于任何可变组件的互斥访问。


4.4 复合优先于继承


4.5 要么为继承而设计,并提供文档说明,要么就禁止继承


4.6 接口优先于抽象类

现有的类可以很容易被更新,以实现新的接口;

接口是定义mixin(混合类型)的理想选择;

接口允许我们构造非层次结构的类型框架。


4.7 接口只用于定义类型


4.8 类层次优于标签类


4.9 用函数对象表示策略


4.10 优先考虑静态成员类