深度总结:软件设计七大原则

软件设计七大原则

软件设计原则是设计模式的基石。目的只有一个,降低对象之间的耦合,增加程序的可复用性、可扩展性、可维护性。

开闭原则 OCP

定义:软件实体对扩展开放,对修改关闭。

  • 对扩展开发,意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。

  • 对修改关闭,意味着类一旦设计完成,就可以独立的工作,而不要对其进行任何的修改。

在面向对象设计中,我们通常通过继承和多态来实现OCP,即封装不变部分。

比如需求要实现2种状态的业务。

  • 如果用if else来判断,那么后面加第三种状态,就还需要在此接口上增加else逻辑,不符合开闭原则。

  • 用策略类实现,则定义策略接口,策略A和策略B为具体实现类,分别对应两种状态。假如下一次需求要实现第三种状态,那么直接定义一个StrategyC实现类就可满足。原有代码不变,符合开闭原则。

详情可点击:策略模式文章

里氏替换原则 LSP

定义:程序中的父类型都可以正确的被子类型替换。

程序中的对象可以在不改变程序正确性的前提下被它的子类所替换,即子类可以替换任何基类能够出现的地方,并且经过替换后,代码还能正确工作。

根据LSP的定义,如果在程序中出现使用instanceof、强制类型转换或者函数覆盖,很可能意味着是对LSP的破坏。

假设定义一个抽象禽类,有一个飞翔方法fly(), 我们就可以自由的继承禽类衍生出各种鸟儿,并调用其飞翔方法。如果鸵鸟加入禽类行列,继承禽类,但不会飞,那么飞翔方法fly()就显得多余。而且在所有禽类出现的地方,无法用鸵鸟替换(此时不满足正确业务逻辑)。违反了里氏替换原则。

经过反思,是设计问题,禽类和飞翔无必然联系,所以禽类不应该定义飞翔方法fly(),把禽类飞翔方法fly()抽离出去单独定义飞翔接口Flyable。

对于有飞翔能力的鸟儿继承禽类并实现飞翔接口。鸵鸟继承禽类,但不实现飞翔接口,是否是鸟儿取决于是否继承自禽类,能不能飞取决于是否实现飞翔接口。所有禽类出现的地方都可以用子类进行替换,所有飞翔接口出现的地方都可以被其替换为实现。

依赖倒置原则 DIP

定义:模块之间交互应该依赖抽象,而非实现。

DIP要求高层模块不应该依赖于底层模块,二者都应该依赖于抽象。抽象不应该依赖细节,细节应该依赖抽象。

比如某个人喂养小动物,如果依赖了具体的实现,则每新增一个动物,需要在Person内加一个对应的方法。违背了开闭原则,也不符合依赖倒置原则。

重新修改后,如下。新增一个Birds抽象类,具体的动物继承自父类Birds,Person中的方法参数依赖于抽象,而不是具体的实现。符合依赖倒置原则。

单一职责原则 SRP

定义:对任何类的修改只能有一个原因。换句话说,一个类只应该负责一项职责。

SRP要求每个软件模块职责要单一,衡量标准是模块是否只有一个被修改的原因。职责越单一,被修改的原因就越少,模块的内聚性就越高,被复用的可能性就越大,也更容易被理解。

举例员工类 Employee,开发工作变了,需要修改Employee类,测试工作变了需要修改Employee类,不符合单一职责原则,类的复杂性也高。

  • 职责多,引起此类变化的原因也多。后续变更的风险就大。

  • 后续需求变更,会造成职责的混乱,类结构的不稳定。

改造后,类的职责单一。开发者的职责就是“写代码”,那么对其进行的修改只有与“写代码”相关的一个原因(画类图也是为了指导代码落地),这样才能确保类职责的单一性原则。

同时,类与类之间虽有着明确的职责划分,但又一起合作完成任务,它们保持着一种“对立且统一”的辩证关系。

  • 以责任链模式为例,每个处理者类职责清晰,只处理与自己职责相关的业务。

  • 以员工类为例,拆分后,各个员工完成相应的职责,共同保障项目上线。

这种清晰的职责范围划分就是单一职责原则的最佳实践。符合单一职责原则的设计能使类具备高内聚性,让单个模块变得简单易懂,如此才能增强代码的可读性和可复用性。并提高系统的易维护性和易测试性。

上面的例子是类职责单一,那么微服务划分也同理,采用单一职责原则,每个服务负责一块业务。同一类业务的变更落在单个服务内变更

接口隔离原则 ISP

定义:客户端对类的依赖基于最小接口,而不依赖不需要的接口。

接口隔离原则认为不能强迫用户去依赖那些他们不使用的接口。换句话说,使用多个专门的接口比使用单一的总接口要好。做接口拆分时,也要尽量满足单一职责原则。将外部依赖减到最少,降低模块间的耦合。

比如类A只需要使用方法1、方法3,类B只需要使用方法2、方法4,但在源代码层次上与所有方法形成依赖关系。这种依赖意味着我们对接口I的方法2修改,即使不会影响A所依赖的方法1、方法3的功能,也会导致它需要重新部署和编译。

改造后,类A不需要用到方法2、方法4,就可以选择不依赖它们。代码更加清晰,接口职责更加明确。

迪米特法则 LOD

定义:一个类对于其它类知道的越少越好。

迪米特法则也被称为最少知识原则,它提出一个模块对其他模块应该知之甚少,或者说模块之间应该彼此保持陌生,甚至意识不到对方的存在,以此最小化、简单化模块间的通信,并达到松耦合的目的。

反之,模块之间若存在过多的关联,那么一个很小的变动则可能会引发蝴蝶效应般的连锁反应,最终会波及大范围的系统变动。我们说,缺乏良好封装性的系统模块是违反迪米特法则的,牵一发动全身的设计使系统的扩展与维护变的举步维艰。

门面模式和中介者模式迪米特法则极好的范例。 Tomcat中 RequestFacade类就使用了外观模式。RequestFacade是对Request类封装,屏蔽内部属性和方法,避免暴露。

合成复用原则 CRP

定义:优先使用合成/聚合,而不是类继承。

比如对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其它更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。

合成(组合)和聚合都是关联的特殊种类。

  • 聚合表示一种弱的拥有关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;

  • 合成则是一种强大的“拥有”关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。

合成/聚合复用原则好处:优先使用对象的合成/聚合将有助于你保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模。

举例:手机软件划分可分为QQ、微信等,按品牌划分可分为华为、小米等。如果同时考虑这两种分类,其组合就很多。往下继续扩展软件、手机品牌,都会新增许多子类。违背了开闭原则,也限制了复用性。

用聚合关系实现的类图:后面新增软件,手机品牌类不用变更代码。继承的层次也少了。

参考资料

  1. 刘韬:《秒懂设计模式》

  2. 张建飞:《代码精进之路:从码农到工匠》

  3. Robert C. Martin:《架构整洁之道》

  4. 程杰:《大话设计模式》

关注公众号,后台回复【笔记】获取技术笔记PDF。

 

阿飞技术
关注 关注
  • 16
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
七大软件架构设计原则详解
dvlinker的技术专栏
05-17 1万+
详细讲解软件设计领域的七大软件架构设计原则
【系统架构设计师】论文:论软件设计模式的应用
数据知道的博客
08-07 3413
该系统是在当前测井成套测井装备的基础上,为了满足高精度,高性能,高效率的要求开发的测井系统。该系统由井下成套仪器,测井遥测系统,测井地面系统,测井软件系统,测井解释评价系统等子系统组成。本人在其中主要是负责测井软件系统的分析、设计以及部分开发任务。设计模式是前人设计面向对象软件的经验和总结,在软件设计中灵活的使用设计模式可以极大的提高系统的稳定性,可扩展性,以及良好的可维护性。
开发七大原则
chouxunge3627的博客
04-24 969
单一职责原则(Single Responsibility Principle) 每一个类应该专注于做一件事情 里氏替换原则(Liskov Substitution Principle) 超类存在的地方,子类是可以替换的 依赖倒置原则(Dependence In...
软件设计七大原则
weixin_34203426的博客
06-01 483
软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。我来依次来总结这 7 条原则。 这 7 种设计原则软件设计模式必须尽量遵循的原则,各种原则要求的侧重点不同。其中,开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要...
设计模式】六大原则已完结,悟透它,你将吃透OOP
最新发布
欢迎拜读我的作品,喜欢的领域请给我留言
08-20 1391
设计模式六大原则是面向对象设计的基石,旨在指导开发者如何创建松耦合、可维护和可扩展的软件设计。这些原则不仅提高了软件设计的质量,还使得软件更容易适应未来的变化。 设计模式六大原则软件开发中的重要指导原则,它们分别是 单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则、依赖倒置原则和迪米特法则。‌ ​
软件设计七大原则
dixu3546的博客
10-09 176
正如牛顿三大定律在经典力学中的位置一样,“开-闭”原则(Open-Closed Principle)是面向对象的可复用设计(Object Oriented Design或OOD)的基石。其他设计原则(里氏代换原则、依赖倒转原则、合成/聚合复用原则、迪米特法则、接口隔离原则)是实现“开-闭”原则的手段和工具。 S.O.L.I.D是面向对象设计和编程(OOD&OOP)中几个重要编码...
软件设计7大原则
hollp_to的博客
08-27 350
原则1、开闭原则2、依赖倒置原则3、单一职责4、接口隔离原则5、迪米特原则6、里氏替换原则7、合成复用原则 1、开闭原则 定义:一个软件实体如类、模块函数应该对扩展开放,对修改关闭。强调的是用抽象构建框架,用实现扩展细节。以提高软件系统的可复用性及可维护性帮助我们实现稳定灵活的系统架构。实现开闭原则的核心思想是面向抽象编程。 2、依赖倒置原则 定义: 高层模块不应该依赖低层模块,两者都应该依赖其抽象 抽象不应该依赖细节 细节应该依赖抽象 每一个逻辑的实现都是由原子逻辑组成的,不可分割的原子逻辑就是低层模块(
设计模式学习之七大原则
weixin_42797377的博客
03-08 646
设计模式学习之七大原则 一、设计模式前言 1、设计模式的概念 软件设计模式(Software Design Pattern),又称设计模式,是一套被反复使用、多数人知晓的、代码设计经验的总结。它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案。也就是说,它是解决特定问题的一系列套路,是前辈们的代码设计经验的总结,具有一定的普遍性,可以反复使用。其目的是为了提高代码的可重用性、代码的可读性和代码的可靠性。 2、设计模式的本质 设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承
软考中级-软件设计师 知识点整理(一篇就过了 建议收藏)
热门推荐
Y的博客
09-23 11万+
软考中级-软件设计师上午题知识点总结
面向对象七种设计原则
12-19 433
文章目录1、面向对象设计原则概述2、单一职责原则3、开闭原则4、里氏代换原则5、依赖倒转原则6、接口隔离原则7、合成复用原则8、迪米特法则 1、面向对象设计原则概述      对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题,如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。在面向...
软件设计原则
qq_18541923的博客
05-09 2565
软件设计原则是指在编写程序时可引导程序员遵循的一些原则和准则。若程序员能够遵循这些准则,在组织代码、保证代码质量等方面会更有信心,代码也会更易于维护、升级和扩展。以下是五个常见的软件设计原则
设计模式 - 六大原则
黄靖翔的博客
02-10 265
1. 单一职责原则 单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分 2. 里氏替换原则 里氏替换原则通俗来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。 也就是说:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。 3. 依赖倒置原则 依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,...
七大软件设计原则
weixin_44259244的博客
02-09 554
1.开闭原则 定义:一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。 用抽象构建框架,用实现扩展细节。 优点:提高软件系统的可复用性及可维护性 2.依赖倒置原则 定义:高层模块不应该依赖低层模块,二者应该依赖其抽象。 抽象不应该依赖细节;细节应该依赖抽象 针对接口编程,不应该针对实现编程 优点:可以减少类间的耦合性,提高系统稳定性,提高代码可读性和可维护性,可降低修改程序所造成的风险。 3.单一职责原则 定义:不要存在多于一个导致类变更的原因 一个类、 接口、方法只负责一项职责 优点:降低
七条软件设计原则
lailai的博客
11-19 164
软件设计原则软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。我来依次来总结这 7 条原则。 这 7 种设计原则软件设计模式必须尽量遵循的原则,各种原则要求的侧重点不同。 其中,开闭原则是总纲,它告诉我们要对扩展开放,对修改关闭; 里氏替换原则告诉我们不要破坏继承体系; 依赖倒置原则告诉我们要面向接口编程; 单一职责原则告诉我们实现类要职责单一; 接口隔离原则告诉我们在设计接口
Apple Vision Pro:深度视觉与动效设计解析
总结一下,Apple Vision Pro 的设计原则强调了结合人体工学理论与设计实践经验,以创造直观、舒适的用户体验。理解和应用这些原则能够提升AR/VR设计的质量,使用户能够更好地沉浸在虚拟环境中,并轻松地与之交互。...
写文章

热门文章

  • git版本回退操作 62008
  • Spring Boot 中 Java8 LocalDateTime 序列化问题 20908
  • PHP环境安装教程 15468
  • 深度总结:软件设计七大原则 10993
  • kkFileview 支持https 9482

分类专栏

  • 数据库 3篇
  • JDK源码 5篇
  • spring源码 3篇
  • redis 1篇
  • Seata源码解析 3篇
  • 知识点 8篇
  • linux 部署 4篇

最新评论

  • UML14种图

    Littlefean: 在UML类图的6种箭头线里面,聚合应该是虚线还是实线?为什么我在其他很多地方看的都是实线+空心菱形,是画错了还是两种都可以呢?

  • Spring Boot WebService 实战解析

    阿飞技术: [code=java] http://localhost:8080/ws/countries.wsdl [/code] 这个路径错了,请忽略,参考截图中的连接

  • PHP环境安装教程

    ss1134: 不够呀大佬表情包

  • PHP环境安装教程

    阿飞技术: 兄弟,不够详细吗表情包

  • PHP环境安装教程

    ss1134: 能出视频吗

大家在看

  • 系统登录接口文档Demo 480
  • 网站安全问题都有哪些,分别详细说明
  • 在VS 2022中配置SDL2环境(C/C++)
  • 【池州学院毕业论文】基于spark的健康膳食推荐系统设计与实现
  • 2024年河北省职业院校技能大赛 网络系统管理赛项 网络构建

最新文章

  • 《技术人管理之路》:如何做管理
  • Spring Boot WebService 实战解析
  • 实时通讯技术实现
2024年3篇
2023年11篇
2022年18篇
2021年13篇
2019年7篇
2018年2篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家海南玻璃钢雕塑美陈装饰高级玻璃钢花盆大悟玻璃钢花盆花器玻璃钢银色雕塑玻璃钢雕塑像大全模郑州佛像玻璃钢卡通雕塑设计玻璃钢雕塑能否维修最优的玻璃钢雕塑玻璃钢雕塑如何挂装正佳海洋馆海星玻璃钢雕塑校园玻璃钢雕塑多少钱伊川玻璃钢雕塑加工厂家哈尔滨仿铜玻璃钢雕塑制作品质玻璃钢雕塑参考价江苏关公玻璃钢雕塑厂家哪家好鹰潭玻璃钢卡通雕塑鄂州玻璃钢商场美陈舞钢商场美陈绿植墙南阳哪里有玻璃钢卡通雕塑厂家广元玻璃钢卡通雕塑图片玻璃钢雕塑材料原料黑龙江古人物玻璃钢雕塑定制西宁玻璃钢动物雕塑设计玻璃钢西瓜雕塑报价玻璃钢雕塑可以放在店铺外吗辽宁酒店玻璃钢造型雕塑制作四川玻璃钢商城广场美陈雕塑报价云南动物玻璃钢雕塑批发江苏玻璃钢金属雕塑介绍玻璃钢仿青铜雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化