概念
设计模式(Design Pattern)是经过高度抽象化的在编程中可以被反复使用的代码设计经验的总结。
正确的实验设计模式是能有效的提高代码的可读性、可重用性和可靠性,在编写符合设计模式规范的代码是不但有利于自身系统的稳定、可靠,还有利于外部系统的对接。
在使用了良好的设计模式的系统工程当中,无论是对满足当前的需求,还是对适应未来的需求,无论是对自身系统间模块的对接,还是对外部系统的对接,都是有很大帮助的。
具体的来说:
设计模式就是在前人的总结之下形成的一种编程思想。在随着软件工程的不断演进,针对不同的需求,新的设计模式在不断的被提出,但设计模式的原则是不会改变的。
所以在基于设计模式的原则,我们可以使用已有的设计模式,也可以根据当前产品或项目的开发需求在已有的设计模式上进行组合、改造或重新设计自己的设计模式。
设计模式的7个原则:
单一职责原则、开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、合成/聚合复用原则、迪米特法则
📢单一职责原则
单一职责原则又称为单一功能原则,它规定一个类只有一个职责。如果有多个职责(功能)被设计在一个类当中,这个类就违反了单一职责原则。
📢开闭原则
开闭原则就是规定软件中的对象(类、模块、函数等)对扩展开发,对修改封闭,这意味着一个实体是允许在不改变其源码的前提下改变其行为,该特性在产品化的环境下是特别有价值的,在这种环境下,改变源码是需要经过代码审查、单元测试等过程,以确保产品的使用质量。遵循这个原则的代码在扩展时是并不会发生改变的,因此不需要经历上述过程。
📢里氏代换原则
里氏代换原则是对开闭原则的补充,规定了在任意父类可以出现的地方,子类都一定可以出现。实现开闭原则的关键就是抽象化,父类与子类的继承关系就是抽象化的具体表现,所以里氏代换原则值针对实现抽象化的具体步骤的规范。
📢依赖倒转原则
依赖倒转原则是指程序要依赖于抽象(比如:java中的抽象类和接口),而不依赖于具体的实现(比如:Java当中的实现类)。
简单的来说,就是要求基于抽象进行编程,不要求对实现进行编程,这就降低了模块之间的耦合度。
📢接口隔离原则
接口隔离原则就是指通过将不同的功能定义在不同的接口中来实现接口的隔离,这样就避免了其他类在依赖该接口(接口上定义的功能)时依赖其不需要的接口,可减少接口之间依赖的冗余性和复杂性。
📢合成/聚合复用原则
合成/集合复用原则指通过将一个新的对象引入(注入)已有的对象以达到类的功能复用和扩展的目的。它的设计原则就是要尽量使用合成或聚合而不要使用集合来扩展类的功能。
📢迪米特法则
迪米特法则是指一个对象尽可能少的与其他对象发生相互作用,即一个对象对其他对象应用有尽可能少的了解或依赖。其核心思想在于降低模块之间的耦合度,提高模块的内聚性。
迪米特法则规定每个模块对其他模块都要尽可能少的了解和依赖,因此很容易使系统模块之间功能独立,这使得各个模块的独立运行变得更简单,同时使得各个模块之间的组合变得更容易
设计模式的类型
设计模型按照其功能和使用场景可以分为三大类:创建型模式(Creational Pattern)、结构性模式(Structural Pattern)、和行为型模型(Behavioral Pattern)。
设计模式 | 说明 | 包含的设计模式 |
---|---|---|
创建型模式 | 用于描述“怎样创建对象”,它的主要特点是“将对象的创建与使用分离”。 | |
工厂模式(Factory Patten) | ||
抽象工厂模式(Abstract Factory Pattern) | ||
单例模式(Singleton Pattern) | ||
建造者模式(Builder Pattern) | ||
原型模式(Prototype Pattern) | ||
结构性模式 | 用于描述如何将类或对象按某种布局组成更大的结构,GoF(四人组)书中提供了代理、适配器、 桥接、装饰、外观、享元、组合等 7 种结构型模式。 | |
适配器模式(Adapter Pattern) | ||
桥接模式(Bridge Pattern) | ||
过滤器模式(Filter Criteria 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) |