设计模式-概述
原文链接 https://vaniot-s.github.io/2018/03/03/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E6%A6%82%E8%BF%B0/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
设计模式
对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。面向对象设计模式来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类别或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。 <!--more-->
设计模式主要分类
设计模式可按作用及范围进行分类,
- 按设计模式的作用
- 创建型
- 结构型
- 行为型
- 按范围划分
- 类
- 对象
创建型模式
模式名 | 范围 | 描述 |
---|---|---|
抽象工厂 | 类 | 为一个产品族提供统一的创建接口,当需要这个产品族的某一系列的时候,可以从抽象工厂中选出相应的系列创及那一个一个具体共厂类 |
工厂方法模式 | 类 | 定义一个接口用于创建对象,但是让子类决定初始化那个类,工厂方法 把一个类初始化下放到子类 |
生成器模式 | 将一个复杂对象构建与它的表示分离,使得同样的构建过程可以创建不同的表示 | |
惰性初始模式 | 推迟对象的创建、书均的计算等需要耗费较多资源的操作,只有在第一次访问的时候才执行 | |
对象池模式 | 通过回收利用个对象避免获取和释放资源所需的按贵成本 | |
原型模式 | 对象 | |
单例模式 | 确保一个类只有一个实例,并提供对该实例的全局访问 |
结构性模式
模式名 | 范围 | 描述 |
---|---|---|
适配器模式 | 分为类适配器和对象适配器模式 | 将某个类的接口转换为客户端期望的另一个接口表示,适配器模式可以消除由于接口不匹配所造成的类兼容性问题 |
桥接模式 | 将一个抽象与实现解耦,两者可以独立的变化 | |
组合模式 | 把多个对象组成树状结构来表示局部与整体,这样用户可以一样的对待单个对象和对象的组合 | |
修饰模式 | 向某个对象动态的添加更多的功能,是除了类继承外的另一种扩展功能的方法 | |
外观模式 | 为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更容易使用 | |
享元 | 通过共享以便有效的支持大量小颗粒对象 | |
代理 | 为其他对象提供一个代理以控制对象的访问 |
行为型模式
模式名 | 范围 | 描述 |
---|---|---|
黑板 | 广义的观察者在系统范围之内交流信息,允许多位读者和写者 | |
责任链 | 为解除请求的发送者和接受者之间耦合 ,而使多个对象都有机会处理这个请求,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。 | |
命令 | 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可取消的操作 | |
解释器 | 给定一个语言,定义其文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。 | |
迭代器 | 提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示 | |
中介者 | 包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用,从而使它们可以松散耦合,当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用,保证这些作用可以彼此独立的变化 | |
备忘录 | 备忘录对象是一个用来存储另一个对象内部状态快照的对象,在不破坏封装的条件下,将一个对象状态捉住,并外部化,存储起来,以便在合适的时候把这个对象还原到存储的状态 | |
空对象 | 通过默认对象来避免空引用 | |
观察者模式 | 在对象间定义一个人一对多的联系性,由此当一个对象改变了状态,其他所有 相关对象会被通知并且自动刷新 | |
规格 | 以布尔形式表示可重绑定的商业逻辑 | |
状态 | 让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对没一个系统可能获取的状态创立一个状态类的子类,当系统状态变化时,系统便改变所选的子类 |