【设计模式】 3.设计模式基本原则

发布于:2025-08-03 ⋅ 阅读:(14) ⋅ 点赞:(0)

单一职责原则

对于一个类而言,有且仅有一个引起他变化的原因或者说,一个类只负责一个职责

如果一个类承担的职责过多,那么这些职责放在一起耦合度太高了,一个职责的变化可能会影响这个类其他职责的能力。

所以我们在做软件设计的时候,要发现职责,并且把这些职责互相分开

例子1

对于看书这件事情,用手机看书和直接看纸质书相比,肯定纸质书的效率要高一些。

因为手机的职责太多了,接打电话、听歌、看电视剧等等,我们在看书的时候,可能收别的职责的影响。

而纸质书,只有一个职责,沉浸式读书。

例子2

电脑机箱中,由CPU、内存、硬盘、显卡、主板等等。

假设我们的CPU、内存、应该、显卡是高层模块,电脑中应该叫易插拔,都插到主板中。

对于电脑这个主体而言,就符合单一职责原则,内存条坏了,不会影响CPU、磁盘和主板。

开闭原则

对扩展开发,对修改封闭【多扩展、少修改】

当我们面对新需求的时候,对程序的修改只是通过增加代码的方式,而不用去修改已有的代码。

这样做我们程序变得更加,可扩展、可维护、可服用、灵活性。

例子

假设现在我们由两个模块,一个是高层模块(做业务逻辑模块),一个底层模块(数据库模块)。

数据库的一些常见操作比如:增删改查,但是我们使用的数据库可以是MySQL、SQLServer、Postgresql等等。

那么如果做到开闭原则呐,抽象出一个类,如果新加了数据库去继承这个类,然后自己去实现增删改查接口。

这样就做到了对扩展开发,对修改封闭了。

依赖倒置原则

高层模块不应该依赖于底层模块,他们都应该依赖于抽象

我们要针对接口编程,而不是针对实现编程

例子1

电脑举例,CPU、内存、硬盘、显卡都应该依赖于抽象接口,而不是依赖于具体的主板。

如果依赖于具体的主板,那么主板坏了,这些高层的设备都用不了了,这样设计显然不合理。

例子2

还是上面那个例子,高层模块(业务逻辑层)和底层模块(数据库层)都不应该互相依赖,而是依赖于抽象。

高层模块 => 抽象 => 低层模块

抽象其实就是基类,底层模块是子类。

MySQL、SQLServer、PostgreSQL都有增删改查操作,假设有一天要用到别的数据库

只需要再创建一个类,继承抽象去实现这些接口,对于高层模块而言,不需要任何的改变(或者只需要改变new的对象而已)

里氏替换原则

子类必须能够替代父类
例子

假设鸟是父类,那么鸵鸟和企鹅能继承于鸟类吗?

如果按照初中老师讲的,鸵鸟和企鹅虽然不能飞,但是属于鸟类。

但是再我们编程的世界里面,如果鸵鸟和企鹅可以继承鸟类,这是不合理的,违反了里氏替换原则。

还是举一个例子,他们的高层模块 => 抽象 => 低层模块

如果抽象中要使用的方法就是鸟的会飞的方法,但是我们底层模块是鸵鸟,根本不会飞,这样就会产生严重的错误

所以里氏替换原子是实现依赖倒置原则的基础