设计模式【笔记】
设计模式
设计模式历史发展
最早出来的时候是篇博士论文,后出版成了书,不好读,难懂
然后遇到了语言的限制
在后面这段时间中,增加了很多的模式,比如并发模式,架构模式等等
Singlethon优缺点
确保全局至多只有一个对象,主要适用于构造缓慢的对象,需要统一管理的资源
缺点也很明显,很多的全局状态,很难维护,线程的安全性也不好保证
singleton的创建
双重锁模式double checked locking
利用系统自带的能力,比如作为java类的静态变量,但是也有一些缺点,必须要在初始化的时候创建,中途创建可能产生冲突
因此可以使用框架提供的能力
变继承关系为组合关系
继承关系的不好之处
描述了is-a的关系,这个关系是比较不稳定的,能力为重,而不是关系为重
不要用继承关系来实现复用,会有局限性,要使用设计模式来实现代码复用
如果employee升级成了manager,可能就会因为继承的is-a关系而调用不到正确的dowork
state模式优缺点
封装了转换规则,比较方便,同时其枚举可能的状态,不过在枚举状态之前需要确定状态种类,而且将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为
state模式还允许状态转换逻辑与状态对象合成一体,还可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数
但是,state模式的使用必然会增加系统类和对象的个数,而且由于state模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱,同时,state模式对"开闭原则"的支持并不太好
decorator模式(装饰模式)
属于结构型模式,说白了就是想增加一个新的功能给现在已经有的对象,但是又不想改变结构的一种方法,顾名思义就是装饰
如何创建对象
使用new来创建对象的缺点
编译时必须决定创建哪一个类的对象
参数意义不明确
解决问题
可以使用abstract factory pattern来解决类的对象的问题
使用builder pattern来解决参数意义不明确的问题
不可变对象往往需要配合builder使用