一、好的设计模块与坏的设计模块java
- 是否隐藏内部数据和其余实现细节
- API与实现,清晰隔离开
- 模块之间经过API通讯
- 信息隐藏或封装是软件设计的基本原则之一
二、信息隐藏很是重要数组
- 能够有效地解除系统各个模块之间的耦合关系
- 使得各个模块独立开发、测试、优化、使用、理解、修改
- 加快系统开发速度
- 减小维护负担
三、信息隐藏自己不会带来好的性能,可是能够有效调节安全
- 一旦系统完成,能够分模块性能测试,肯定影响性能模块,单独优化
四、信息隐藏提升了软件的可重用性性能
- 下降了构建大型系统风险
- 即便整个系统不可用,有些独立模块也是可用的
五、java 提供了许多机制来协助隐藏信息测试
- 访问控制,决定了类、接口和成员的可访问性
- 实体的可访问性由其声明所在的位置,以及实体声明中所出现的访问修饰符共同决定
- 正确使用这些修饰符对信息隐藏很是关键
六、第一规则:尽量使每一个类或成员不被外界访问优化
七、对于顶层的类(非嵌套类)和接口,只有两种可能的访问级别线程
- 包级私有:非public 修饰,成为实现的一部分,内部修改优化,外界不感知
- 公有:public 修饰,API一部分,有责任一直维护,以保持兼容
八、一个顶层包级私有类,若是仅仅在一个类的内部被使用到设计
九、下降没必要要公有类的可访问性,比下降包级私有顶层类更重要的多对象
十、对于成员(域、嵌套类、嵌套接口、方法),有四中访问级别接口
- 私有、包级私有是实现的一部分,不该该影响导出的API
(1)私有的(private):只有在声明该成员的顶层类内部才可访问
(2)包级私有(缺省修饰符):声明该成员的包内部的任何类均可以访问
(3)受保护的(protected):声明该成员类的子类能够访问,包内部也均可以访问
(4)公有的(public):任何地方均可以访问
十一、公有类的成员,从私有变成保护级别,会大大加强可访问性
- 保护成员是其导出API一部分,必须一直支持
- 受保护成员也成了该类对某个实现细节的公开承诺,
- 受保护成员尽可能少用
十二、若是一个方法覆盖了父类的一个方法,子类的访问级别就不能低于超类的访问级别
- 违反该规则,编译器会报错
- 若是一个类实现了一个接口,那么全部接口方法,类都要声明为公有的
- 接口种方法都隐含着公有访问级别
1三、实例域毫不能是公有的
- 包含公有可变域的类并非线程安全的
- 即便域是final 的,而且引用不可变对象
- 当这个域变成公有的时候,就放弃了“切换到内部数据表示法”的灵活性
- 一样的状况,适用于静态域
- 例外:常量构成类提供的整个抽象的一部分,可使用静态final 域暴漏他们
- 上述例外:大写字母,下划线分割,要么引用基本类型值,要么不可变类对象
- 若是引用可变对象,即使final 修饰,其余地方能够修改、灾难后果
1四、长度非零的数组是可变的
- 类具备的公有final 数组域、返回这种域的访问方法,几乎都是错的
- 若是类具备这样的域或访问方法,客户端能够访问修改数组中的内容(常见安全漏洞)



两种解决方案,要考虑客户端如何使用结果、怎么方便、性能高来进行选择