设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

因此,为了少走弯路,避免闭门造车,系统的学习设计模式非常有必要的。

上面 BB 完无聊的设计模式定义以及学习设计模式的重要性。下面说说写作计划。

这一系列大概会用 30 篇博客来较为系统和完整的描述设计模式,其中主要参考的资料是 GOF 的 《设计模式-可复用对象软件的基础》这本书。但是会做相应的提炼,扩展。光说不练假把式,因此每个模式除了非常重要的 UML 图,我还会至少给出至少一个详尽的代码示例,主要是以 Java 语言为主,在合适的时候,会举例在其他语言中是如何实现的,或者对这些实现做相应的对比。

分类

设计模式大约有 20 几种(没有绝对的对错,只是分类,称谓之别,但思想还是通用的)。这里给出 GOF 的分类,主要分为三大类:

  • 创建型(Creational)
    • 抽象工厂模式 (Abstract Factoty)
    • 构造者模式 (Builder)
    • 原型模式 (Prototype)
    • 单例模式 (Singleton)
  • 结构性 (Structual)
    • 适配器模式 (Adapter)
    • 桥接模式 (Bridge)
    • 组合模式 (Composite)
    • 装饰者模式 (Decorator)
    • 门面模式 (Facade)
    • 享元模式 (Flyweight)
    • 代理模式 (Proxy)
  • 行为型 (Behavioral)
    • 责任链模式 (Chain of Responsibility)
    • 命令模式 (Command)
    • 迭代器模式 (Iterator)
    • 中介者模式 (Mediator)
    • 备忘录模式 (Memento)
    • 观察者模式(Observer)
    • 状态模式(State)
    • 策略模式(Strategy)
    • 访问者模式(Vistor)

分类的划分标准,主要解决的问题以及每种设计模式的详细介绍都会在后续博客中详细介绍。

S.O.L.I.D 原则

如何评价一个设计的优缺点呢?其中一个重要的原则就是 SOLID)。SOLID 具体指的是:

  • S 单一职能原则
  • O 开闭原则
  • L 里氏替换原则
  • I 接口隔离原则
  • D 依赖倒置原则

SOLID 原则使开发一个容易维护,容易扩展的系统成为可能,是面向对象编程和面向对象设计的五个重要原则。更多关于 SOLID 的详细描述可以参考庐主和阿姨之前合作翻译过的文章。

结语

既然这篇博客作为开篇,就不废话太多。下一篇内容预告:UML 基础。

UML 可以方便的来描述设计模式,看懂 UML 可以为后面的学习打好基础。下一篇不见不散。