使可变性最小化

使可变性最小化

概述

不可变类是其实例不能被修改的类,并且实例中包含的所有信息都必须在创建实例的时候提供,在整个对象生命周期中固定不变。

原则

为了使类不可变,要遵守:

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

由于不可变对象本质上是线程安全的,所以它们并不要求同步,这是获得线程安全最容易的方法;

另外,不可变对象可以被自由地共享,甚至共享其内部信息;

缺点

不可变类最大的缺点,对于每个不同的值都需要一个单独的对象。对于大型对象的情形,创建这种对象的代价可能很高。