设计模式-总览
很久很久以前,忘记从哪看到一句话——设计模式是对编程语言缺陷的弥补。
年轻的我并没意识到这句话背后的真实含义以及所处语境,外加之后主要开发语言是Python这个动态语言,设计模式真的没怎么用到——比如装饰模式不就是Python中的装饰器嘛,一个语法糖能解决的事居然还弄出个模式来?
直到我开始学习openstack的源码,发现里面用到了大量的设计模式,才明白自己是多么无知可笑。
这里借用一位大佬的话:
如果你觉得设计模式在某程度上没用,说明两个问题:
1.你的系统还不足以复杂到要用设计模式的程度
2.你的经验还没强到能熟练应用设计模式的程度。
能找到这篇文章的,应该都知道面向过程、面向对象、封装继承多态、高内聚低耦合(包含程序级别以及架构级别)、开闭原则(对扩展开放、对修改关闭)、依赖倒置原则(尽量使用抽象类型作为对象实例变量类型,用于实现开闭原则)、单一责任原则(一个模块只负责一个功能)等一堆的名词,以及“组合优于继承”(这里略有争议,我个人对此赞同,最近看一些继承过多的代码总是要向上找好几层父类,还要仔细看子类中有没有重写父类方法,术语叫做类膨胀)。
What
设计模式(Design Pattern)简单说就是经验的总结,大佬们将其分为了23种。
Why
通过使用设计模式来提高软件质量,降低开发人员之间的沟通成本。
How
先学基础,知道每种设计模式的优缺点以及应用场景,然后灵活应用。
总览
《软件秘籍——设计模式那点事》这本书将设计模式分为了三类:
- 创建型
- 工厂方法模式(Factory Method Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 建造者模式(Builder Pattern)
- 原型模式(Prototype Pattern)
- 单例模式(Singleton Pattern)
- 结构型
- 适配器模式(Adapter Pattern)
- 桥接模式(Bridge Pattern)
- 组合模式(Composite Pattern)
- 装饰器模式(Decorator Pattern)
- 外观模式(Facade Pattern)
- 享元模式(Flyweight Pattern)
- 代理模式(Proxy Pattern)
- 行为型
- 责任链模式(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本书。