设计模式
简介
设计模式(Design Pattern)是软件开发中常见问题的可重用解决方案。它不是具体的代码,而是一种思想、模板或最佳实践,描述了如何在特定场景下解决设计问题。
优点
- 设计模式已经成为了一种解决重复出现的问题的工业标准,所以使用设计模式更省时省力。
- 设计模式可以提升代码重用性,编写鲁棒性更好、维护性更好的代码。
- 因为设计模式已经定义成了标准,所以更容易理解和调试。可以加速开发,新成员也更容易理解。
分类
可分为创建型(Creational),结构型(Structural) 和行为型(Behavioral) 三种。
- 创建型模式:主要用于描述如何创建对象
- 结构型模式:主要用于描述如何实现类或对象的组合
- 行为型模式:主要用于描述类或对象怎样交互以及怎样分配职责
设计模式的7大原则
设计模式有7大原则,目的只有一个:降低对象之间的耦合,增加程序的可复用性、可扩展性和可维护性。
| 设计原则 | 归纳 | 目的 |
|---|---|---|
| 开闭原则 | 对扩展开放,对修改关闭 | 降低维护带来的新风险 |
| 依赖倒置原则 | 高层不应该依赖低层,要面向接口编程 | 更利于代码结构的升级扩展 |
| 单一职责原则 | 一个类只干一件事,实现类要单一 | 便于理解,提高代码的可读性 |
| 接口隔离原则 | 一个接口只干一件事,接口要精简单一 | 功能解耦,高聚合、低耦合 |
| 迪米特法则 | 不该知道的不要知道,一个类应该保持对其它对象最少的了解,降低耦合度 | 只和朋友交流,不和陌生人说话,减少代码臃肿 |
| 里氏替换原则 | 不要破坏继承体系,子类重写方法功能发生改变,不应该影响父类方法的含义 | 防止继承泛滥 |
| 合成复用原则 | 尽量使用组合或者聚合关系实现代码复用,少使用继承 | 降低代码耦合 |
GoF 设计模式
GoF 是 Gang of Four(四人帮) 的缩写,指 1994 年出版的经典书籍《设计模式:可复用面向对象软件的基础》(Design Patterns: Elements of Reusable Object-Oriented Software)的四位作者。
创造型模式
关注对象的创建机制,增加系统的灵活性和复用性。
| 模式 | 说明 |
|---|---|
| 单例模式 | 保证一个类只有一个实例 |
| 工厂方法模式 | 定义创建对象的接口,让子类决定实例化哪个类 |
| 抽象工厂模式 | 创建相关或依赖对象的家族 |
| 建造者模式 | 分步骤构建复杂对象 |
| 原型模式 | 通过复制现有对象创建新对象 |
结构型模式
关注类和对象的组合,形成更大的结构。
| 模式 | 说明 |
|---|---|
| 适配器模式 | 让不兼容的接口协同工作 |
| 装饰器模式 | 动态给对象添加职责 |
| 代理模式 | 为其他对象提供代理以控制访问 |
| 外观模式 | 为子系统提供统一接口 |
| 组合模式 | 将对象组合成树形结构 |
| 桥接模式 | 将抽象与实现分离 |
| 享元模式 | 共享细粒度对象以节省内存 |
行为模式
关注对象间的通信和职责分配。
| 模式 | 说明 |
|---|---|
| 观察者模式 | 对象间一对多依赖,自动通知 |
| 策略模式 | 定义一系列算法,可互换使用 |
| 责任链模式 | 请求沿处理链传递 |
| 命令模式 | 将请求封装为对象 |
| 模板方法模式 | 定义算法骨架,子类实现细节 |
| 状态模式 | 对象内部状态改变时行为改变 |
| 访问者模式 | 在不改变元素类的前提下定义新操作 |
| 中介者模式 | 用中介对象封装对象交互 |
| 备忘录模式 | 保存和恢复对象状态 |
| 解释器模式 | 定义语言文法并解释句子 |
| 迭代器模式 | 顺序访问集合元素 |
