速查:设计模式-速查表

速查设计模式的“定义”和“用处”

策略模式
定义:定义算法族,分别封装起来,让它们可以互相替换
用处:让算法的变化独立于使用算法的客户

观察者模式
定义:在对象之间定义一对多的依赖,当一个对象改变状态时,依赖它的对象会收到通知并自动更新。
用处:同上

装饰器模式
定义:动态地把责任加到对象上
用处:用继承之外的方法扩展功能。
核心本质:
1. 装饰器和被装饰的对象有相同的父类,所以可以替代被装饰对象。
2. 装饰器对象有一个属性是被装饰对象
3. 可以层层装饰

工厂模式
定义:定义了一个创建对象的接口,由子类决定实例化的类型到底是哪个
用处:把类的实例化推迟到子类。

单例模式
定义:确保类只有一个实例,且提供全局访问点。
要点:
1. 多个类加载器可能导致出现多个单例。
2. jvm1.2和之前版本的垃圾回收有bug:会自动回收单例对象。
3. 使用时临时创建单例对象方案会有多线程bug:在第一个线程进入null为真的语句赋值单例对象之前,其他线程可能会也进入null为真的语句。
方案:
1. 急切实例化,静态地初始化实例。可以避免上面问题3
2. 同步getInstance()方法,可能影响性能。
3. 双重检查加锁,必须java5以上版本才行。

命令模式
定义:把请求封装成对象
用处:把发出请求的对象和执行的对象解耦。比如事先日志和事务功能。
要点:
1. “请求”被建模为对象
2. 命令对象封装了执行者
3. 发出者运行命令对象的execute()方法,执行者的方法就被调用
4. 命令对象可以支持undo()方法

适配器模式
定义:把一个类的接口转换成客户期望的另一个接口
用处:让原本不兼容的类兼容。

外观模式
定义:提供一个统一接口来访问子系统中的一群接口。
用处:此模式定义一个高层接口,方便子系统使用
要点:
1. 提供高层接口是为了方便使用

*模式对比
适配器:包装一个对象“改变其接口”
装饰器:包装一个对象“增加行为和职责”
外观模式:包装一群对象“简化其接口”

模板方法
定义:在父类中定义算法骨架,把一些步骤的实现延迟到子类
好处:算法骨架被封装到父类,子类无需了解也无法篡改,只能实现或改变算法骨架中的部分步骤。

迭代器模式
定义:提供一种方法一次访问数据集对象的各个元素,但不暴露其内部表示
好处:不同的数据集对象的迭代器实现相同接口,让遍历元素的代码与数据集对象的具体类型解耦

组合模式
定义:允许你把对象组成树形结构来表现“整体/部分”的层次结构。
好处:让客户以一致的方法处理个别对象和对象组合。

暂时先写到这,后续更新敬请期待。

posted @ 2017-02-28 21:10  长治久安  阅读(345)  评论(0编辑  收藏  举报