1 工厂方法模式
当client不知道/不确定要创建哪个具体类的实例,或者不想在client代码中指 明要具体创建的实例时,用工厂方法。 定义一个用于创建对象的接口,让该接口的子类型来决定实例化哪一个类,从 而使一个类的实例化延迟到其子类。
常规情况下,client直接创建具体对象
//
Product p = new ProductOne();
在工厂方法模式下:
//
Product p = new ConcreteCreatorOne().factoryMethod();
例子:
2 抽象工厂模式
抽象工厂模式:提供接口以创建一组相关/相互依赖的对象, 但不需要指明其具体实现类。
工厂模式和抽象工厂模式的区别:
创建一个对象 vs 创建多个类型的对象
一个factory方法 vs 多个factory方法
例子:
3 代理模式
某个对象比较“敏感”/“私密”/“贵重”,不希望被client直接访问 到,故设置proxy,在二者之间建立防火墙。
- 远程代理:为 一 个 对 象在 不 同 的 地 址 空间 提 供 局 部 代 表 (缓存机制)
- 虚代理:根据需要创建开销很大的对象
- 保护代理 :提供访问保护
代理模式和适应模式的区别:
代理模式目的隔离对复杂 对象的访问,降低难度/代价,定位在“访问/使用行为”
适应模式:目的消 除不兼容,目的是B以客户端期望的统一的方式与A建立起联系
4 观察者模式
- 一种“发布-订阅”形式,发布方的变化,会通知订阅方
- 订阅方在发布方注册
- 通过接口分离两者
5 访问者模式
在特定ADT上执行某种特定操作,但该操作不在ADT内部实现,而是delegate到独立的visitor对象,客户端可灵活 扩展/改变visitor的操作算法,而不影响ADT。
6 共性样式
适应模式:适用场合你已经有了一个类, 但其方法与目前client的需求不 一致。 根据OCP原则,不能改这个类, 所以扩展一个adaptor和一个统一接口。
代理模式:适用场合你已经有了一个类, 但其方法与目前client的需求不 一致。 根据OCP原则,不能改这个类, 所以扩展一个adaptor和一个统一接口。