2009年4月9日星期四

JavaDesign_027:不变模式 Immutable(摘录+整理)

1. 特点
(1)一个对象被创建之后就不再改变。

2. 优点(1)因为不能修改对象的状态,因此不变对象比可变对象更加容易维护。
(2)因为不能修改对象的状态,因此不变对象是线程安全的。

3. 缺点(1)因为不能修改对象的状态,因此如果不得不改变对象,只好创建一个新对象。

4. 代码架构(1)弱不变模式类的实例都不可改变。子类的实例可以改变。
  • 所有的属性都应当是私有的。
  • 引用到的其它对象如果是可变的,应当在不变对象内部初始化。
  • (接上)如果只能在外部初始化,再传入时,“克隆”一份新的。
(2)强不变模式:类及子类的实例都不可改变。
  • 满足所有弱不变的模式。
  • 所有的方法都是final的(子类无法置换)。
  • 类本身是final的(不可能有子类)
5. Java中对命令模式的应用
(1)String。
(2)封装类:Long、Integer......
6. “不变(Immutable)”与"只读(Read Only)"的区别不变”即不发生改变,“只读”可能发生改变(因为其它变量的改变而改变)。
比如一个人的生日是“不变”
的,一个人的年龄是“只读”的,生日一旦“创建”就不可改变,年龄则一年年变化,但是”只读“的。
7. 典型应用场景(1)复数类
参考文献:
1. 《设计模式》 板桥里人
2. 《Java与模式》 阎宏

没有评论: