EffectiveJava78条学习笔记之13

1、好的设计模块与坏的设计模块

  • 是否隐藏内部数据和其他实现细节
  • API与实现,清晰隔离开
  • 模块之间通过API通信
  • 信息隐藏或封装是软件设计的基本原则之一

2、信息隐藏非常重要

  • 可以有效地解除系统各个模块之间的耦合关系
  • 使得各个模块独立开发、测试、优化、使用、理解、修改
  • 加快系统开发速度
  • 减少维护负担

3、信息隐藏本身不会带来好的性能,但是可以有效调节

  • 一旦系统完成,可以分模块性能测试,确定影响性能模块,单独优化

4、信息隐藏提高了软件的可重用性

  • 降低了构建大型系统风险
  • 即使整个系统不可用,有些独立模块也是可用的

5、java 提供了许多机制来协助隐藏信息

  • 访问控制,决定了类、接口和成员的可访问性
  • 实体的可访问性由其声明所在的位置,以及实体声明中所出现的访问修饰符共同决定
  • 正确使用这些修饰符对信息隐藏非常关键

6、第一规则:尽可能使每个类或成员不被外界访问

  • 应该写与你所编写内容一致,尽可能小的访问权限

7、对于顶层的类(非嵌套类)和接口,只有两种可能的访问级别

  • 包级私有:非public 修饰,成为实现的一部分,内部修改优化,外界不感知
  • 公有:public 修饰,API一部分,有责任一直维护,以保持兼容

8、一个顶层包级私有类,如果仅仅在一个类的内部被使用到

  • 考虑让其成为内部嵌套类

9、降低不必要公有类的可访问性,比降低包级私有顶层类更重要的多

  • 因为公有类是API的一部分

10、对于成员(域、嵌套类、嵌套接口、方法),有四中访问级别

  • 私有、包级私有是实现的一部分,不应该影响导出的API

(1)私有的(private):只有在声明该成员的顶层类内部才可访问

(2)包级私有(缺省修饰符):声明该成员的包内部的任何类都可以访问

(3)受保护的(protected):声明该成员类的子类可以访问,包内部也都可以访问

(4)公有的(public):任何地方都可以访问

11、公有类的成员,从私有变成保护级别,会大大增强可访问性

  • 保护成员是其导出API一部分,必须一直支持
  • 受保护成员也成了该类对某个实现细节的公开承诺,
  • 受保护成员尽量少用

12、如果一个方法覆盖了父类的一个方法,子类的访问级别就不能低于超类的访问级别

  • 违反该规则,编译器会报错
  • 如果一个类实现了一个接口,那么所有接口方法,类都要声明为公有的
  • 接口种方法都隐含着公有访问级别

13、实例域绝不能是公有的

  • 包含公有可变域的类并不是线程安全的
  • 即使域是final 的,并且引用不可变对象
  • 当这个域变成公有的时候,就放弃了“切换到内部数据表示法”的灵活性
  • 同样的情况,适用于静态域
  • 例外:常量构成类提供的整个抽象的一部分,可以使用静态final 域暴漏他们
  • 上述例外:大写字母,下划线分割,要么引用基本类型值,要么不可变类对象
  • 如果引用可变对象,即便final 修饰,其他地方可以修改、灾难后果

14、长度非零的数组是可变的

  • 类具有的公有final 数组域、返回这种域的访问方法,几乎都是错的
  • 如果类具有这样的域或访问方法,客户端可以访问修改数组中的内容(常见安全漏洞)

  • 解决上述漏洞:

  • 备份解决:

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

猜你喜欢

转载自my.oschina.net/u/3847203/blog/1822121
今日推荐