那些常用的设计模式
总的来说,可以分为三类:创建类模式,结构类模式,行为类模式。
设计模式要干的事情就是解耦。创建型模式是将创建和使用代码解耦,结构型模式是将不同功能代码解耦,行为型模式是将不同的行为代码解耦。
创建型设计模式
解决对象的创建问题。
封装复杂的创建过程,解耦对象的创建代码和使用代码。
- 单例模式(Singleton):使用过程中只创建一个对象。
- 工厂模式(Factory):封装复杂的创建过程,不同类型但相关的对象。
- 建造者模式(Builder):对于复杂的构造器,定制创建不同对象。
- 原型模式(Prototype):复制创建成本较大的对象。
结构型设计模式
用于解决一些类和对象的组合方式。
- 代理模式(Proxy):不改变原始类,引入代理类增加附加功能。
- 桥接模式(Bridge):组合优先于继承,分离多维度的变化。
- 装饰者模式(Decorator):对原有功能的增强,继承相同的抽象类或者接口,动态扩展基础类的功能。
- 适配器模式(Adapter):将不兼容的接口转换为可兼容的接口。
- 门面模式(Facade):为子系统提供一组统一的接口,定义一组高层接口让子系统更易用,使接口易用。
- 组合模式(Composite):递归式处理树形结构。
- 享元模式(Flyweight):复用 final 对象,节省内存。
行为型设计模式
用于解决类和对象的交互问题。
- 观察者模式(Observer):在对象之间定义一个一对多的依赖,当一个对象状态改变的时候,所有依赖的对象都会自动收到通知。
- 模板方法模式(Template Method):在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中实现。
- 策略模式(Strategy):定义一族算法类,将每个算法分别封装起来,让它们可以互相替换。
- 职责链模式(Chain of Responsibility):将请求的发送和接收解耦,让多个接受对象都有机会处理这个请求。
- 迭代器模式(Iterator/Cursor):访问一个容器对象中各个元素,而又不需暴露该对象的内部细节,隐藏访问细节.
- 状态模式(State):允许对象在内部状态改变时改变行为.
- 访问者模式(Visitor):允许一个或者多个操作应用到一组对象上,解耦操作和对象本身。
- 备忘录模式(Memento):不违背封装原则的前提,存储副本以便后期恢复。
- 命令模式(Command):将请求封装为对象,使用不同的请求将客户端参数化。
- 解释器模式(Interpreter):为某个语言定义语法表示,并定义解释器来处理。
- 中介模式(Mediator):引入中间层,封装一组对象的交互。