什么是设计模式?顾名思义,设计模式是一种软件设计所使用的方法,适用于面向对象软件设计。设计模式是一种方法,或者说是一种方法论,它是软件前辈们经历了无数的软件工程设计中的痛点和教训之后,总结出来的经验的结晶。设计模式是一种软件设计方法,不是代码,也不是规范。
1. 设计模式的提出
如果设计出优秀的软件一直是软件从业者探索的目标。优秀的软件,必须具备可复用、可扩展、可维护、高性能等特点,既要保证系统的高内聚、低耦合的特点,又要保证系统随时应对各种变化的灵活性。然很,这往往依赖于软件设计者的个人经验积累,而新手往往对此无从下手。
设计模式的提出,为软件设计指明了方向。
设计模式概念的提出,要追溯到1994年。在1994年,由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides 四为软件大师合著了一本名为 Design Patterns - Elements of Reusable Object-Oriented Software(中文译名:设计模式 - 可复用面向对象软件的基础)的书,该书首次提到了软件开发中设计模式的概念。
Ps: 公众号后台回复关键字"设计模式"下载此书
该书总结了面向对象设计中最有价值的经验,并总结出了23中最常见和最有价值的设计模式,为软件设计之路开启了一盏明灯,此书的四名作者又被称为GOF(Gang Of Four,四人帮)。这23种设计模式主要基于面向对象设计的两种基本原则:
对接口编程而不是对实现编程
优先使用对象组合而不是继承
2. 设计模式的概念
设计模式来源于城市和建筑模式:
每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题解决方案的核心。这样,你就能一次又一次的使用该方案而不必做重复劳动。
这个思想同样适用于面向对象的设计模式。一般而言,设计模式包含四大要素:
名称(pattern name): 描述模式解决的问题、方案和效果
问题(problem): 描述何时使用模式、设计的问题以及问题存在的背景
解决方案(solution): 描述了设计的组成部分、他们之间的相互关系和协作的方式
效果(consequence): 描述了使用模式应该达到的效果和应该权衡的问题
3. 设计模式的类型
书中对设计模式进行了详细阐述,并将设计模式分为三大类型:
3.1. 创建型模式(Creational)
对象怎么创建?Java中,最简单的是使用关键 new
来创建一个对象实例,然而,我们需要思考:我们需要这么多对象实例吗?这种方式是我们需要的吗?这种方式是最好的吗?创建型模式抽象了对象实例化过程,它描述了如何去创建对象,而无需关注实例化细节。创建型模式包括:
3.2. 结构型模式(Stuctural)
结构型模式,描述了如何组合类和对象以获得最大的结构,通常这些模式使用继承的方式来进行组合,包括:
3.3. 行为型模式(Behavioral)
行为型模式,描述了对象间职责的分配和通信模式,涉及到算法,主要关注在运行时难以跟踪的复杂的控制流程,并将其转义到对象间的关系上来。行为型模式有:
3.4. 其他设计模式
空对象模式(Null Object Pattern)
委派模式(Delegate Pattern)
4. 设计模式遵循的七大原则
设计模式遵循软件设计的 七大原则,他们包括:
单一职责原则(Single Responsibility)
开闭原则(Open Close Principle)
里氏代换原则(Liskov Substitution Principle)
依赖倒转原则(Dependence Inversion Principle)
接口隔离原则(Interface Segregation Principle)
迪米特法则,又称最少知道原则(Demeter Principle)
合成复用原则(Composite Reuse Principle)
这些原则我们将在下篇详细讨论。