设计模式
目录
- 了解设计模式
- 面向对象设计原则
- UML类图
- GOF设计模式
- 小结
- 书籍推荐
- 参考文献
了解设计模式
设计模式的起源
每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能无数次地反复使用这个方案,而不必再做重复的思考。 -- Christopher Alexander
Gang Of Four
- Ralph Johnson
- Erich Gamma
- Richard Helm
- John Vlissides
设计模式的定义
在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领域引入到计算机科学的。
设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类或对象来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类或对象。
设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。
并非所有的软件模式都是设计模式,设计模式特指软件“设计”层次上的问题。还有其他非设计模式的模式,如架构模式。同时,算法不能算是一种设计模式,因为算法主要是用来解决计算上的问题,而非设计上的问题。
设计模式的作用
- 解决某些特殊的设计问题
- 减少重复设计的工作量
- 重用设计方案比重用代码更有意义,它会自动带来代码重用
- 模式在实践中可作为模板使用
- 把专家的知识、经验传递给新手
- 为设计提供共同的词汇
- 每个模式名就是一个设计词汇,其概念使得程序员间的交流更加方便
- 编写开发文档更加容易
- 在开发文档中采用模式名称可以让其他人更容易理解设计者的想法,为什么这么做、做了些什么
- 应用设计模式可以让系统重构变得容易
面向对象设计原则(SOLID)
- Single Responsibillity principle(单一原则)
- 类的职责单一
- 一个类只有一个引起它变化的原因
- Open-Closed principle(开闭原则)
- 对扩展开放,对修改关闭
- Liskov subsitution principle(里氏替换原则)
- 使用父类的地方都能够使用其子类替换
- Interface segretation principle(接口隔离原则)
- 多个特定的接口要好于一个宽泛用途的接口
- Dependency inversion principle(依赖反转原则)
- 针对接口编程,而不是针对实现编程
UML类图
- UML(Unified Modeling Language)统一建模语言
- 建模目的是产生模型
- 模型是对现实的简化,对事物的抽象,了解事物的本质
GOF设计模式
-
模式名和分类
- 创建型(Creational)、结构型(Stuctural)、行为型(Behavioral)
-
意图
- 做什么,基本原理,解决什么特定问题
-
动机
- 用以说明一个设计问题以及如何使用模式中的类、对象来解决改问题的特性情景
-
适用性
- 什么情况下可以使用
-
结构
- 使用UML类图描述模式
-
参与者
- 设计模式中的类和对象以及它们各自的职责
-
协作
- 模式的参与者怎么协作来完成它们的职责
-
效果
- 模式的好处是什么,需要做哪些权衡,哪些方面可以独立改变
-
实现
- 实现模式的提示、技术要点以及应该避免的缺陷
-
代码示例
- 实现该模式的代码片段
-
已知应用
- 实际系统中发现的模式的例子
-
相关模式
- 与这个模式紧密关联的模式有哪些,不同之处,应该与哪些其他的模式一起使用
创建型模式
创建型设计模式抽象了实例化的过程
- Abstract Factory(抽象工厂)
- Builder(生成器)
- Factory Method(工厂方法)
- Prototype(原型)
- Singleton(单例)
结构型模式
结构型设计模式关注如何组合类和对象以获得更大的结构
- Adapter(适配器)
- Bridge(桥梁)
- Composite(组合)
- Decorator(装饰)
- Facade(外观)
- Flyweight(享元)
- Proxy(代理)
行为型模式
行为型设计模式涉及算法和对象间职责的分配
- Chain of Resonsibility(职责链)
- Command(命令)
- Interpreter(解释器)
- Iterator(迭代器)
- Mediator(中介者)
- Memento(备忘录)
- Observer(观察者)
- State(状态)
- Strategy(策略)
- Template Method(模板方法)
- Visitor(访问者)
小结
- 设计模式
- 起源:建筑工程(1979),软件工程(1990)
- 定义:软件设计中反复出现的各种问题的解决方案
- 作用:解决特定设计问题、减少重复工作量、方便沟通、易于编写设计文档等等
- 面向对象设计原则
- SOLID
- UML类图
- 继承、实现、组合、聚合、关联、依赖
- GOF设计模式
- 描述设计模式
- Creational
- Singleton
- Structural
- Proxy
- Adapter
- Behavioral
- Chain of Responsibility
- Command
- Creational
- 描述设计模式
书籍推荐
参考文献
- 《设计模式:可复用面向对象软件的基础》
- 《Head First 设计模式》
- 《架构整洁之道》
- https://zh.wikipedia.org/wiki/SOLID_(面向对象设计)
- https://zh.wikipedia.org/wiki/设计模式_(计算机)
- https://zh.wikipedia.org/wiki/设计模式:可复用面向对象软件的基础
- https://github.com/yangjinlong86/design-pattern