设计模式学习随笔

正确的设计模式原则:正确的设计模式都需要这八大原则,基于这八大原则,甚至可以设计自己的设计模式。

1、依赖倒置原则(DIP):变化依赖于稳定,稳定不能依赖于变化。

高层类模块不应依赖于低层类模块,高层和底层模块都应该依赖于抽象。高层和低层都是易变的,而抽象是稳定的。

另一方面,抽象不应依赖于细节的实现(不能包含细节实现的代码),而细节实现应依赖于抽象。细节实现是易变的,而抽象是稳定的。所以总而言之,变化的模块须依赖于稳定的模块,稳定的模块不能依赖于变化的模块,即易变的模块和细节实现都应依赖于稳定的抽象

2、开放封闭原则(OCP):对扩展开放,对修改封闭

如果需求变化,好的设计模式应该是对原有代码进行扩展,而不是改变之前的代码。即对扩展开放,对修改封闭

3、单一职责原则(SRP)

一个类仅有一个引起他变化的原因,因为变化的方向隐含这类的责任,而正确的设计模式应该使一个类只含有单一的职责

4、Liskov替换原则(LSP)

处于“继承”关系的子类必须可以随时随地地替换其父类,其实就是在使用“继承"关系时要完全遵循"is-a"(Circle is a Shape, Rectangle is a Shape)的原则。如果父类有的方法在子类中不能用,那就不满足Liskov原则,那说明这里不适合用继承关系,而需要用组合等其他方法来替代。

5、接口隔离原则(ISP)

如果一个类有一些方法对于用户根本没有调用的必要,则应该写成private,暴露给用户的接口应该小而完备,即不该暴露给用户的就不暴露。

6、优先使用对象组合,而不是类继承

由于使用继承时,父类需要把一系列方法暴露给子类,这样一定程度上破坏了封装性,从而增加了父类和子类间的耦合度。

继承一般称为白箱复用,而组合一般称为黑箱复用,黑箱复用的耦合性更强,所以应该优先使用组合,避免继承带来的父子类耦合度提高的缺点

7、封装变化点

在设计时应该使用封装来创建对象间的分界层,分界层的意思就是让设计者在变化点的一侧进行修改,变化点的另一侧不会遭到影响,降低耦合性。即须一侧变化,一侧稳定

8、针对接口编程,而不是针对实现编程

在按照需求进行代码架构时,应该将用户所需的方法类设计为接口,客户无需获知每个方法的具体实现,而只保留纯虚的接口给用户调用即可,从而实现高内聚,低耦合。

 这样记:李(Liskov)一(依赖)姐(接口)开(开闭)单(单一职责)

另外,设计模式是介于架构模式(如MVC)代码模式之间的一种模式。它分为创建型模式(负责创建数据,如工厂模式)、结构性模式(负责存储数据对象,如装饰模式用Add方法代理继承)和行为性模式(负责处理数据)。

推荐一些设计模式的学习资源

链接:

Java:https://www.youtube.com/watch?v=RAT45ftpAIc&t=3s&index=2&list=PLGmd9-PCMLhb16ZxeSy00qUsBazXgJyfM

C++:https://www.bilibili.com/video/av22292899

文字版:https://design-patterns.readthedocs.io/zh_CN/latest/read_uml.html

原文地址:https://www.cnblogs.com/zeppelin5/p/10019390.html