【设计模式】 原则

单一职责原则

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

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

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

例子1

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

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

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

例子2

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

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

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

开闭原则

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

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

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

例子

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

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

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

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

依赖倒置原则

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

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

例子1

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

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

例子2

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

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

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

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

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

里氏替换原则

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

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

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

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

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

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

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

相关推荐
梓仁沐白16 小时前
【Agent 设计模式】多智能体协作
microsoft·设计模式·php
努力学习的廖同学17 小时前
前端进阶-设计模式
设计模式
workflower2 天前
情境感知系统
人工智能·机器学习·设计模式·自然语言处理·机器人
咖啡八杯2 天前
设计模式中的原则
设计模式·接口隔离原则·里氏替换原则·开闭原则·合成复用原则·单一职责原则
安冬的码畜日常2 天前
【工欲善其事】深入理解 Node.js 带并发上限的异步任务批量执行逻辑
javascript·设计模式·node.js·ai编程·异步编程·并发执行
AI大法师2 天前
一个机场如何被做成 IP 场景:宝可梦机场的设计方法总结
大数据·人工智能·设计模式·新媒体运营
晚安code2 天前
干掉成山的 if-else:工厂造、策略选,一文讲透两个模式的配合
后端·设计模式
workflower3 天前
从幻觉,到现实
人工智能·深度学习·机器学习·设计模式·机器人
电子科技圈3 天前
第二代无线平台历久弥新,赋能物联网创新迭代
人工智能·嵌入式硬件·mcu·物联网·设计模式·硬件架构·iot
choumin3 天前
创建型模式——工厂方法模式
c++·设计模式·工厂方法模式·创建型模式