目录
设计模式
分为以下三类模式:创建型模式、结构型模式、行为型模式
1. 创建型模式(Creational patterns)
1.1 *工厂方法模式(Factory Method pattern)
当client不知道要创建哪个具体类的实例,或者不想再client代码中指明要具体创建的实例时,用工厂方法。
工厂模式:将创建一个对象的方法委托给另一个类(工厂类)来实现
Client用工厂方法来创建实例,得到的实例类型是抽象接口而非具体类
静态工厂方法(在工厂方法前加static):既可以在ADT内部实现,也可以单独创建工厂类
该设计模式是OCP(扩展/开放原则)的一个体现。
优点:实现信息隐藏
缺点:需要额外创建工厂类,程序更复杂
2. 结构型模式(Structural patterns)
2.1 适配器模式(Adapter)
将某个类/接口转换为client期望的其他形式(主要解决接口不匹配问题)
通过增加一个接口,将已存在的子类封装起来,client面向接口编程,从而隐藏了具体子类
2.2 装饰器模式(Decorator)
对一个类的功能进行扩充(实现特性的组合)
装饰器在运行时组合特性;继承在编译时组合特性
3. 行为型模式(Behavioral patterns)
3.1 策略模式(Strategy)
使用功能的时候不访问功能实现,访问接口(在多个功能间灵活切换)
3.2 模板模式(Template Method)
共性的操作步骤在抽象类中公共实现,差异化的步骤在各个子类中实现
使用继承和重写来实现模板模式
模板模式在框架中应用广泛
抽象类中有一些方法用final来修饰,这些方法即为模板方法
3.3 迭代器(Iterator)
将集合类的迭代操作委托给迭代器来实现。
让自己的集合类实现 Iterable 接口,并实现自己的独特 Iterator 迭代器 (hasNext, next, remove) ,允许客户端利用这个迭代器进行显式或隐式的迭代遍历:
3.4 Visitor模式
把类中的某些功能委托给别人实现(实现功能时要反过来用到原来的类)
Visitor vs Iterator
迭代器:以遍历的方式访问集合数据而无需暴露其内部表示,将“遍历”这项功能delegate到外部的iterator对象。
Visitor:在特定ADT上执行某种特定操作,但该操作不在ADT内部实现,而是delegate到独立的visitor对象,客户端可灵活扩展/改变visitor的操作算法,而不影响ADT
迭代器和Vistor模式结构相同,只是方法不同(本质上无区别)
Strategy vs visitor
自己的独特 Iterator 迭代器 (hasNext, next, remove) ,允许客户端利用这个迭代器进行显式或隐式的迭代遍历: