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

设计模式 单一职责原则、开放封闭原则、依赖倒置原则、里氏代换原则

目录

1 单一职责原则

2 开放封闭原则

3 依赖倒置原则

4 里氏代换原则


1 单一职责原则

比如:电脑内存坏了就应该更换内存,不应该更换CPU

(内存负责内存、CPU负责CPU)

就一个类而言,应该仅有一个引起它变化的原因。

如果你能想到多于一个动机去改变一个类,那么这个类就具有多于一个的职责,就应该考虑类的职责分离。

2 开放封闭原则

比如:电脑内存不够只要插槽足够就可以扩展,硬盘不够可以用移动硬盘

开放-封闭原则,是说软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。

有两个特征:

对于扩展是开放的,对于更改是封闭的。

我们在做设计的时候,就应该思考,怎样的设计才能面对需求的改变却可以保持相对稳定,从而使得系统可以在第一个版本以后不断推出新的版本呢

也就是说,设计软件要容易维护又不容易出问题的最好办法,就是多扩展,少修改

“开放-封闭原则”的精神所在:
对程序的改动是通过增加新代码进行的,而不是更改现有的代码。

注意:
开发人员应该仅对程序中呈现频繁变化的那些部分做出抽象(并不是每一个部分都要刻意地进行抽象)
 

3 依赖倒置原则

(也叫依赖倒转原则)

例如:无论主板、CPU、内存、硬盘都是在针对接口设计的,如果针对实现来设计,内存就要对应到具体的某个品牌的主板,就会出现换内存需要把主板也换了的尴尬。

原话解释是:抽象不应该依赖细节,细节应该依赖于抽象。


就是:要针对接口编程,不要对实现编程

高层模块不应该依赖低层模块。高层和低层两个都应该依赖抽象。

4 里氏代换原则

一个软件实体如果使用的是一个父类的话,那么一定适用于其子类,而且它察觉不出父类对象和子类对象的区别。

也就是说,在软件里面,把父类都替换成它的子类,程序行为没有变化

里氏代换原则:子类型必须能够替换掉它们的父类型。

相关文章:

  • Codeforces Round #816 (Div. 2)补题(A-E)
  • 【牛客网-公司真题-前端入门篇】——百度2021校招Web前端研发工程师笔试卷(第二批)
  • 【Android应用与开发】DAY1-安装Android Studio报错整合及学习
  • Mybatis实战练习六【批量删除Mybatis参数传递】
  • 小白量化《穿云箭集群量化》(1)小白草根超级量化软件介绍
  • C语言指针操作(七)*指针数组和多重指针
  • 【python经验总结】我与bug的那些日子
  • <栈和队列及模拟实现>——《Data Structure in C Train》
  • 猿创征文|【Typescript】搭建TS的编译环境
  • 【项目管理】beautyeye
  • Connor学Android - HandlerThread和IntentService
  • Github每日精选(第31期):macOS 下的亮度和音量调节MonitorControl
  • Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 第7章 Vue.js高级进阶 7.10 路由守卫
  • 金融核心系统云原生转型的三个挑战、六个误区和四个步骤
  • zsh安装以及ROS适配
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 345-反转字符串中的元音字母
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • java中具有继承关系的类及其对象初始化顺序
  • js ES6 求数组的交集,并集,还有差集
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • nodejs实现webservice问题总结
  • Shell编程
  • TypeScript迭代器
  • 从tcpdump抓包看TCP/IP协议
  • 让你的分享飞起来——极光推出社会化分享组件
  • 通过几道题目学习二叉搜索树
  • 应用生命周期终极 DevOps 工具包
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #QT项目实战(天气预报)
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (算法)Travel Information Center
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .htaccess 强制https 单独排除某个目录
  • .NET 4.0中的泛型协变和反变
  • .Net Core和.Net Standard直观理解
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • @SentinelResource详解
  • [04] Android逐帧动画(一)
  • [20180224]expdp query 写法问题.txt
  • [BZOJ3757] 苹果树
  • [C# WPF] DataGrid选中行或选中单元格的背景和字体颜色修改
  • [C++]打开新世界的大门之C++入门
  • [Codeforces] number theory (R1600) Part.11
  • [docker]docker网络-直接路由模式
  • [EFI]Dell Latitude-7400电脑 Hackintosh 黑苹果efi引导文件
  • [elastic 8.x]java客户端连接elasticsearch与操作索引与文档