设计模式的基本概念
架构模式
软件设计中的高层决策,从全局看待问题,例如C/S结构,架构模式反映了开发软件系统过程中所作的基本设计决策
设计模式
主要关注软件系统的设计,从局部看待问题,与具体实现语言无关
惯用法
最低层的模式,关注软件系统的设计与实现,实现时通过某种特定的程序设计语言来描述构件之间的关系,每种编程语言都有自己特定的模式,即语言的惯用法。
设计模式的分类
创建型模式
用于创建对象的模式,为设计类实例化的新对象提供指南。
创建型模式名称 | 说明 |
抽象工厂模式 Abstract Factory | 提供一个接口类型,可以创建一系列相关或相互依赖的对象,无需指定他们具体的类(不止可以是类模式,也可以是对象模式) |
构建器模式 Builder | 将一个复杂类的表示与其构造相分离,使得相同的构建过程能得出不同的表示 |
工厂方法模式 Factory Method | 定义一个创建对象的接口,由子类决定需要实例化哪一个类,工厂方法使得子类实例化过程推迟 |
原型模式 Prototype | 用原型实例指定创建对象类型,拷贝原有对象生成新的对象,例如直接复制源代码改一下生成新代码比重新敲一遍源代码要快 |
单例模式 Singleleton | 保证一个类只有一个实例,比如浏览器中可以打开多个标签页,但是当前显示的只有一个页面 |
结构型模式
处理类或对象的组合问题,为类或对象形成更大的结构提供指导。
结构型模式名称 | 说明 | 关键字 |
适配器模式 Adapter | 将一个类的接口转换成用户希望得到的另一种接口,使原本不相容的接口可以协同工作(不止可以是类模式,也可以是对象模式) | 转换接口 |
桥接模式 Bridge | 将类的抽象部分和他的实现部分分离,使他们可以独立变化 | 继承树拆分 |
组合模式 Composite | 将对象组合成树形结构来表示整体和部分的层次结构,使用户对单个对象和和对象的使用具有一致性 | 树形目录结构 |
装饰模式 Decorator | 动态地给一个对象添加一些额外的职责,提供了用子类扩展功能的一个灵活的替代,比派生子类更加灵活 | 附加职责 |
外观模式 Facade | 定义一个高层接口,为了系统中的一组接口提供一个一致的外观,从而简化了该子系统的使用 | 对外统一接口 |
享元模式 Flyweight | 提供支持大量细粒度对象共享的有效方法 | |
代理模式 Proxy | 为其他对象提供一种代理以控制这个对象的访问 |
行为型模式
行为模式名称 | 说明 | 关键字 |
职责链模式 Chain of Responsibility | 将接收对象连接起来形成链,发送者发送消息通过链中对象依次传递,直到有对象能回复,可以减少发送者与接收者之间的耦合 | 传递职责 |
命令模式 Command | 将请求封装成为对象,将请求排队或记录日志支持撤销 | 日志记录,可撤销 |
解释器模式 Iterpreter | 给定一种语言,定义他的文法表示并定义一个解释器,该解释器用来根据文法表示来解释语言中的句子(不止可以是类模式,也可以是对象模式) | |
迭代器模式 Iterator | 提供一种方法来顺序访问一个聚合对象中的各个元素而不需要暴露该对象的内部表示 | |
中介者模式 Mediatir | 用一个中介对象来封装一些列的对象交互,它使各对象不需要显示地相互调用,从而达到低耦合们还可以独立地改变对象间地交互 | 不直接引用 |
备忘录模式 Memento | 不破坏封装性地前提下捕获对象内部状态,并在该对象之外进行保存,从而可以在以后将该对象恢复 | |
观察者模式 Observer | 定义对象之间的一对多关系,当一个对象的状态发生改变时,所有依赖于他的对象都得到通知并自动更新 | |
状态模式 State | 将状态做成类,类的改变可以改变当前的行为 | 状态变成类 |
策略模式 Strategy | 定义一系列算法,把他们各自封装,使他们之间可以相互替换,让算法可以独立于使用他的用户变化 | 多方案切换 |
模板方法模式 Template Method | 定义一个操作中的算法骨架,将一些步骤延迟到子类当中,使子类可以不改变一个算法的结构即可重新定义算法的某些特定步骤(不止可以是类模式,也可以是对象模式) | |
访问者模式 Visitor | 表示一个作用于某对象结构中的各元素的操作,使得在不改变个元素的类的前提下定义作用于这些元素的新操作 |