很久很久以前,忘记从哪看到一句话——设计模式是对编程语言缺陷的弥补。

年轻的我并没意识到这句话背后的真实含义以及所处语境,外加之后主要开发语言是Python这个动态语言,设计模式真的没怎么用到——比如装饰模式不就是Python中的装饰器嘛,一个语法糖能解决的事居然还弄出个模式来?

直到我开始学习openstack的源码,发现里面用到了大量的设计模式,才明白自己是多么无知可笑。

这里借用一位大佬的话:

如果你觉得设计模式在某程度上没用,说明两个问题:
1.你的系统还不足以复杂到要用设计模式的程度
2.你的经验还没强到能熟练应用设计模式的程度。

能找到这篇文章的,应该都知道面向过程、面向对象、封装继承多态、高内聚低耦合(包含程序级别以及架构级别)、开闭原则(对扩展开放、对修改关闭)、依赖倒置原则(尽量使用抽象类型作为对象实例变量类型,用于实现开闭原则)、单一责任原则(一个模块只负责一个功能)等一堆的名词,以及“组合优于继承”(这里略有争议,我个人对此赞同,最近看一些继承过多的代码总是要向上找好几层父类,还要仔细看子类中有没有重写父类方法,术语叫做类膨胀)。

What

设计模式(Design Pattern)简单说就是经验的总结,大佬们将其分为了23种。

Why

通过使用设计模式来提高软件质量,降低开发人员之间的沟通成本。

How

先学基础,知道每种设计模式的优缺点以及应用场景,然后灵活应用。

总览

《软件秘籍——设计模式那点事》这本书将设计模式分为了三类:

  1. 创建型
    • 工厂方法模式(Factory Method Pattern)
    • 抽象工厂模式(Abstract Factory Pattern)
    • 建造者模式(Builder Pattern)
    • 原型模式(Prototype Pattern)
    • 单例模式(Singleton Pattern)
  2. 结构型
    • 适配器模式(Adapter Pattern)
    • 桥接模式(Bridge Pattern)
    • 组合模式(Composite Pattern)
    • 装饰器模式(Decorator Pattern)
    • 外观模式(Facade Pattern)
    • 享元模式(Flyweight Pattern)
    • 代理模式(Proxy Pattern)
  3. 行为型
    • 责任链模式(Chain of Responsibility Pattern)
    • 命令模式(Command Pattern)
    • 解释器模式(Interpreter Pattern)
    • 迭代器模式(Iterator Pattern)
    • 中介者模式(Mediator Pattern)
    • 备忘录模式(Memento Pattern)
    • 观察者模式(Observer Pattern)
    • 状态模式(State Pattern)
    • 策略模式(Strategy Pattern)
    • 模板方法模式(Template Method Pattern)
    • 访问者模式(Visitor Pattern)

学习设计模式不是目的,真正的目的是学习这种思想,并在实践中应用,学会归纳和总结。

另外这本书是一本被书名耽误了的书,我个人是以这本书为主要脉络,结合《大话设计模式》来进行复习,有兴趣的小伙伴可以翻翻这2本书。