当前位置: 首页 > news >正文

设计模式浅谈

什么是设计模式

设计模式是一种软件设计的思想。是在软件开发过程中,经过验证的、用于解决在特定环境下重复出现的、特定问题的解决方案。

设计模式的设计原则

原文链接:https://blog.csdn.net/qq_43471489/article/details/124067150

设计原则

1、单一职责原则
2、里氏替换原则
3、依赖倒转原则
4、接口隔离原则
5、迪米特原则(最少知道原则)
6、合成复用原则
总原则:开闭原则

开闭原则

对外部的扩展开放,对内部的修改封闭。
为了使程序的扩展性好,易于维护和升级,需要使用接口和抽象类对外进行程序扩展,而不是去修改原有的代码。

单一职责原则

类在封装的时候应该只实现单一的职责,若实现不了就进行拆分。

里氏替换原则

里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。—— From Baidu 百科

依赖倒置原则

依赖倒置原则是面向对象编程的标志,在具体软件设计时,上层模块不应该依赖于底层模块,底层模块更不应该依赖上层模块,而是上层模块和底层模块都向中间靠拢,共同依赖于二者中间的抽象接口层。整个软件程序设计的依赖关系应该终止于抽象接口层,上层和底层互不关心,甚至使用什么编程语言都不关心。抽象接口层提供一个标准或者协议,它对上提供访问的接口,对下提供实现的标准,抽象接口层本身不执行任何操作,具体的功能由它的实现去完成。【假如我们要组装一台电脑,现在要选择硬盘、内存、屏幕。那么电脑类要集成硬盘、内存、屏幕这些组件,但是我们希望电脑类和组件类之间不应该是相互依赖的关系,我们就可以直接给出一套接口,各个组件厂商只要实现这些抽象接口就可以装入我们的电脑中。】

接口隔离原则

一个接口对外只提供一种功能,不同功能应该通过不同的接口提供,而不是把多种功能都封装到一个接口中,否则的话,可能有的客户只需要功能A不需要功能B,但是提供A功能的接口内还封装了功能B,这就造成了客户被迫依赖某种他们不需要的功能。

迪米特原则(最少知道原则)

一个类对于其它类知道的越少越好,只和朋友说话,不要和陌生人说话,这里的朋友是指作为成员变量、方法输入输出参数的类(朋友类),如果是出现在一个方法内部的类就不是朋友类。迪米特法则降低了耦合度,各个模块之间通过一个接口来实现调用,而模块之间不需要知道对方的内部实现逻辑,并且一个模块的内部改变也不会影响到另一个模块(黑盒原理)。如果两个类不直接通信,那么这两个类就不应当发生直接的相互作用。如果一个类需要调用另一个类的某个方法的话,可以通过第三个类转发这个调用。

合成复用原则

尽量首先使用合成/聚合的方式,而不是使用继承。

设计模式的分类

创建型模式

工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式

适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式

策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

http://www.lryc.cn/news/15122.html

相关文章:

  • 【kubernetes】使用crictl对k8s节点进行调试
  • 数字经济讨论题
  • gcc/g++、动静态库、make/makefile
  • 北京博奥智源,浅谈图书馆的馆情展示系统细则
  • Docker----------day-mysql8主从复制
  • 【Nginx】【一】Nginx简介
  • 跳跃游戏II-力扣45-java 动态规划
  • 【算法】用python代码解决“鬼谷问徒”问题
  • 【1】linux命令每日分享——mkdir创建目录
  • TPM 2.0实例探索1
  • buu [BJDCTF2020]signin 1
  • Storage
  • CAS底层原理及ABA问题
  • 华为OD机试真题Python实现【单词反转】真题+解题思路+代码(20222023)
  • 嵌入式linux驱动学习-用cdev代替register_chrdev()
  • 技术更新!10个MySQL性能调优技巧
  • ICLR 2023|VLDet:从图像-文本对中学习区域-词语对齐的开放词汇式目标检测
  • 如何效率搭建企业流程系统?试试低代码平台吧
  • 嵌入式开发:C++在深度嵌入式系统中的应用
  • 快鲸scrm发布快递行业私域运营解决方案
  • 【蓝桥杯集训·每日一题】AcWing 1497. 树的遍历
  • 详解matplotlib的color配置
  • Oracle删除表数据的三种方式
  • 第 16 章_多版本并发控制
  • 五种 IO 模型
  • 34-Golang中的结构体!!!
  • 这6个视频剪辑素材库,你一定要知道~
  • RocketMQ WIN11 搭建
  • iPhone更换电池和屏幕后提醒非原厂配件的操作办法
  • chatGPT发布记录