掌握设计模式的层次
- 第1层:刚开始学编程不久,听说过什么是设计模式
- 第2层:有很长时间的编程经验,自己写了很多代码,其中用到了设计模式,但是自己却不知道
- 第3层:学习过了设计模式,发现自己已经在使用了,并且发现了一些新的模式挺好用的
- 第4层:阅读了很多别人写的源码和框架,在其中看到别人设计模式,并且能够领会设计模式的精妙和带来的好处。
- 第5层:代码写着写着,自己都没有意识到使用了设计模式,并且熟练的写了出来
设计模式介绍
- 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通用解决方案,设计模式(Design Pattern)代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长一段时间的试验和错误总结出来的。
- 设计模式的本质:提高软件的维护性、通用性和扩展性,并降低软件的复杂度。
- 《设计模式》是经典的书,作者是 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides Design(俗称 “四人组 GOF”)
- 设计模式并不局限于某种语言,java,php,c++都有设计模式
设计模式类型
设计模式分为三种类型,共23种
- 创 建 型 模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂方法模式。
- 结 构 型 模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
- 行 为 型 模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式。
创 建 型
单例模式(Singleton Pattern)
- 所谓类的单例模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只能提供一个取得其对象实例的方法(静态方法)。
抽象工厂模式(Abstract Factory Pattern)
- 将工厂抽象成两层,AbsFactory(抽象工厂)和具体实现的子类。程序员可以根据创建对象类型使用对应的的工厂子类。这样将单个的简单工厂变成了工厂簇,更利于代码的维护和扩展。
原型模式(Prototype Pattern)
- 用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。
建造者模式(Builder Pattern)
- 将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
工厂方法模式(Factory Method Pattern)
- 由一个工厂对象决定创建出哪一种产品类的实例。
结 构 型
适配器模式(Adapter Pattern)
- 将某个类的接口转换成客户端期望的另一个接口表示,主要目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。
桥接模式(Bridge Pattern)
- 将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变。
装饰模式(Decorator Pattern)
- 动态的将新功能附加到对象上。
组合模式(Composite Pattern)
- 又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以表示“整体-部分”的层次关系。
外观模式(Facade Pattern)
- 也叫“过程模式”,外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用
- 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节
享元模式(FlyWeight Pattern)
- 享元模式(FlyWeight Pattern)也叫 蝇量模式:运用共享技术有效的持有大量细粒度的对象
代理模式(Proxy Pattern)
- 为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。
行 为 型
模版方法模式(Template Method Pattern)
- 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
命令模式(Command Pattern)
- 命令模式(Command Pattern):在软件设计中,我们经常需要向某些对象发送请求,但是不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计。
- 命令模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦。
访问者模式(Visitor Pattern)
- 访问者模式(Visitor Pattern),封装一些作用于某种数据结构的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
- 主要将数据结构与数据操作分离,解决数据结构和操作耦合性问题
迭代器模式(Iterator Pattern)
- 迭代器模式,提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部的结构
观察者模式(Observer Pattern)
- 观察者模式:对象之间多对一依赖的一种设计方案,被依赖的对象为Subject,依赖的对象为Observer,Subject通知Observer变化。观察者模式类似于订牛奶业务,比如这里的奶站是Subject,是1的一方,用户是Observer,是多的一方。
中介者模式(Mediator Pattern)
- 中介者模式(Mediator Pattern),用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互
备忘录模式(Memento Pattern)
- 备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态
解释器模式(Interpreter Pattern)
- 解释器模式(Interpreter Pattern):是指给定一个语言(表达式),定义它的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(表达式)
状态模式(State Pattern)
- 状态模式(State Pattern):它主要用来解决对象在多种状态转换时,需要对外输出不同的行为的问题。状态和行为是一一对应的,状态之间可以相互转换
- 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类
策略模式(Strategy Pattern)
- 策略模式(Strategy Pattern)中,定义算法族(策略组),分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户
职责链模式(Chain of Responsibility Pattern)
- 职责链模式(Chain of Responsibility Pattern),又叫 责任链模式,为请求创建了一个接收者对象的链(简单示意图)。这种模式对请求的发送者和接收者进行解耦。
- 职责链模式通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,以此类推。