目录
一、设计原则
二、设计模式分类
1、创建型模式:创建对象
2、结构型模式:更大的结构
3、行为型模式:交互以及职责分配
4、对象模式与类模式区别
三、各类型模式简介
1、创建型模式
2、结构型模式
3、行为型模式
一、设计原则
- 单一职责:设计目的单一的类。
- 开放-封闭原则:对扩展开放,对修改封闭。
- 李氏(Liskow)替换原则:子类可以替换父类。
- 依赖倒置原则:依赖于抽象,而不是具体实现;针对接口编程。不要针对实现编程。
- 接口隔离原则:使用多个专门的接口比使用单一的总接口要好。
- 组合重用原则:要尽量使用组合,而不是继承关系达到重用目的。
- 迪米特(Demeter)原则(最少知识原则):一个对象应当对其他对象有尽可能的了解。
二、设计模式分类
下面我们基于GOF 23种设计模式进行归纳和总结。
1、创建型模式:创建对象
工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、
单利模式(Singleton)、原型模式(Prototype)、建造者模式(Builder)
2、结构型模式:更大的结构
代理模式(Proxy)、门面模式(Facade)、装饰器模式(Decorator)、享元模式(Flyweight)、组合模式(Composite)、适配器模式(Adapter)、桥接模式(Bridge)
3、行为型模式:交互以及职责分配
模板方法模式(Template Method)、策略模式(Strategy)、责任链模式(Chain of Responsibility)、迭代器模式(Iterator)、命令模式(Command)、状态模式(State)、备忘录模式(Memento)、中介者模式(Mediator)、解释器模式(Interpreter)、观察者模式(Observer)、访问者模式(Visitor)
注意:其中工厂方法模式、解释器模式、模板方法模式属于纯类模式。
适配器模式属于:对象模式又是类模式。
除此之外都是对象模式。
4、对象模式与类模式区别
三、各类型模式简介
1、创建型模式
- 工厂方法模式(Factory Method):定义了创建对象的接口,他允许子类决定定实例化哪个类。简单理解:动态产生对象。
- 抽象工厂模式(Abstract Factory):提供一个接口。可以创建一系列相关或者相互依赖的对象,而无需指定他们具体的类。简单理解:生产成系列的对象。
- 单利模式(Singleton):确保一个类只有一个实例,并且提供了对该类的全局访问入口。简单理解:单实例。
- 原型模式(Prototype):允许对象在不了解要创建对象的确切类以及如何创建等细节的情况下创建自定义对象。通过拷贝原型对象来创建新的对象。简单理解:克隆对象。
- 建造者模式(Builder):将一个复杂类的表示与其构造相分离,使得相同的构建过程能够得出不同的表示。简单理解:复杂对象构造。
2、结构型模式
- 代理模式(Proxy):为控制对初始对象的访问提供了一个代理或者占位符对象。简单理解:快捷方式。
- 门面模式(Facade):子系统中的一组接口提供一个统一的接口。简单理解:对外统一接口。
- 装饰器模式(Decorator):在不修改对象对外观和功能的情况下添加或者删除对象功能,即动态地给一个对象添加一些额外的职责。简单理解:动态附加职责。
- 享元模式(Flyweight):可以通过共享对象减少系统中低等的,详细的对象数目提供支持大量细粒度对象共享的有效方法。简单理解:汉子编码。
- 组合模式(Composite):创建树型层次结构来改变复杂性,同时允许结构中的每一个元素操作同一个接口,用于表示“整体-部分”的层次结构。简单理解:树型目录结构。
- 适配器模式(Adapter):将一个类的接口转换成用户希望得到的另一个接口,他是原本不相容的接口得以协调工作。简单理解:接口转换。
- 桥接模式(Bridge):将一个复杂的组件分成两个独立的但又相关的继承层次结构,将类的抽象部分和他的视线部分分离开来,使他们可以独立的变化。简单理解:继承树拆分。
3、行为型模式
- 责任链模式(Chain of Responsibility):可以再系统中建立一个链,这样消息可以再首先接收到他的级别处被处理,或者可以定位到可以处理他的对象。 简单理解:传递职责。
- 模板方法模式(Template Method):提供了在不重写方法的前提下允许子类重载部分方法的方法。简单理解:框架。
- 命令模式(Command):在对象中封装了请求,这样可以保存命令,将该命令传递给方法以及像任何其他对象一样放回该命令。简单理解:日志记录,可撤销。
- 解释器模式(Interpreter):可以解释定义其语法的语音,还提供了用表示来解释语音中语句的解释器。简单理解:虚拟机的机制。
- 策略模式(Strategy):定义一系列算法,把它们的一个个封装起来,并且使他们之间可以互相替换,从而让算法可以独立于使用它的用户而变化。简单理解:多方案切换。
- 迭代器模式(Iterator):为集合的有序访问提供了一致的方法,而该集合是独立于基础集合,并与之项分类的。简单理解:数据集。
- 状态模式(State):允许一个对象在其内部状态改变时改变它的行为。简单理解:状态变成类。
- 备忘录模式(Memento):保持对象状态的“快照(snapshot)”,这样对象可以在不向外界公开其内容的情况下返回到它的最初状态。简单理解:游戏存档。
- 中介者模式(Mediator):通过引入一个能够管理对象间消息分布的对象,简化了系统中对象间通信。简单理解:不直接引用。
- 观察者模式(Observer):为组件向相关接收广播消息提供了灵活的方法定义对象间的一种一对多的依赖关系。简单理解:订阅、广播、联动。
- 访问者模式(Visitor):提供了一种方便的,可以维护的方法来表示在对象结构元素上要进行的操作。简单理解:数据与操作分离。