简介
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式可以提高代码的可复用性、可维护性、可读性、稳健性以及安全性。 项目中合理地运用设计模式可以完美地解决很多问题,但滥用设计模式不但不会带来任何好处,还会带来很多负面影响,所以学习设计模式是每个程序员进阶的必经之路!其中设计模式主要基于以下的两个面向对象设计原则:
- 对接口编程而不是对实现编程
- 优先使用对象组合而不是继承
设计模式类型
根据参考书 Design Patterns - Elements of Reusable Object-Oriented Software (中文译名:设计模式 - 可复用的面向对象软件元素)中所述,总共有23种设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为型模式(Behavioral Patterns)。但是请注意,这里的23种设计模式,只是Gang of Four(四人帮)几位大佬们,经过多年总结提炼出来的最经典的设计模式,而不是设计模式一共这么多,我们随便写一个模式都可以称为设计模式,只是没什么软用而已。
创建型模式
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。可以用于解耦对象的实例化过程。例如Spring框架中大量用到了创建模式,帮助用户管理对象的创建过程,以达到解耦的目的!
- 工厂模式(Factory Pattern)
- 抽象工厂模式(Abstract Factory Pattern)
- 单例模式(Singleton Pattern)
- 建造者(生成器)模式(Builder Pattern)
- 原型模式(Prototype 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 Pattern)
- 访问者模式(Visitor Pattern)
如下图所示:
设计模式的七大原则
- 单一职责原则(Single Responsibility Principle)
单一职责原则的意思是一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因 - 开闭原则(Open Close Principle)
开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。 - 里氏代换原则(Liskov Substitution Principle)
里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。 - 依赖倒转原则(Dependence Inversion Principle)
这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。 - 接口隔离原则(Interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。 - 迪米特法则,又称最少知道原则(Demeter Principle)
最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。 - 合成复用原则(Composite Reuse Principle)
合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。
这七大原则是所有设计模式的基础,也是最重要的思想部分,但我们要明白,没有一种设计模式是最完美的,只有最适合的,甚至在某些场景下,有的设计模式会违反以上的七大原则!