Effective Java

来源:互联网 发布:帝国cms支付 编辑:程序博客网 时间:2024/06/06 18:31

读书笔记 仅供参考

不可变类

不可变类就是实例不能被修改的类,每个实例中包含的所有信息都必须在创建该实例的适合提供,并一直固定不变
不可变类比可变类更加易于设计、实现和使用,不容易出错,且更加安全

五条规则

  • 不提供任何修改对象状态的方法
  • 保证类不会被扩展
  • 所有域都是 final
  • 所有域都是私有
  • 确保对于任何可变组件的互斥访问(对可变对象的引用)

函数的做法

方法返回一个函数的结果,函数对操作数进行运算但是并不修改它

public Complex add(Complex c) {    return new Complex(re + c.re, im + c.im);}

不可变对象的优点

  • 不可变对象比较简单,只有一种状态
  • 不可变对象本质上是线程安全的,不要求同步
  • 不可变对象可以被自由地共享
  • 不可变对象为其他对象提供了大量的构件

缺点

每一个不同的值都需要一个单独的对象,如果创建对象的代价太大,就会造成浪费。
如果执行一个多步骤的操作,并且每一个步骤都会产生一个新的对象,那么就会出现性能问题,解决方案

  • 猜测会经常用到哪些多步骤的操作,将它们作为基本类型提供。

设计方案

使类不允许自身被子类化:

  • 使类成为 final
  • 让类的所有构造器都变成私有的或者包级私有的,并添加公有的静态工厂代替公有的构造器
原创粉丝点击