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

大话设计模式——六大基本设计原则(SOLID原则)

设计模式

定义:软件开发中,在特定上下文中解决一类常见问题的被证明为有效的最佳实践。可供其他开发者重复使用解决相似问题。
好处:

  • 提高代码的可重用性,减少重复代码。
  • 提高代码的可维护性,使代码更易于理解和修改。
  • 提高代码的可扩展性,使系统更易于适应新的需求或变化。
  • 促进团队之间的沟通和协作,因为设计模式为解决问题提供了共同的语言和思路。

总结:
设计模式不应过渡使用,可能会导致代码变得复杂且难以理解,提高了代码抽象性,可能导致系统可维护性降低,使得适得其反。

一、单一职责原则(Single Responsibility Principle,SRP)

一个类或模块应该只有一个修改的理由。即一个类或模块应该只有一个职责。

二、开闭原则(Open/Closed Principle,OCP)

软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。即在不修改已有代码的情况下,通过扩展来实现新的功能或变化。

三、里氏替换原则(Liskov Substitution Principle,LSP)

所有引用基类(父类)的地方必须能够透明地使用其子类的对象。即子类对象可以替换掉父类对象,而程序不会出错或产生异常。

四、迪米特法则(Law of Demeter,LoD)

也称为最少知识原则(Principle of Least Knowledge,PoLK)或者叫作"不要和陌生人说话"(Don’t talk to strangers)。⼀个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。

五、接口隔离原则(Interface Segregation Principle,ISP)

客户端不应该依赖它不需要的接口。使用多个隔离的接口,比使用单个接口要好,降低类之间的耦合度

六、依赖倒转原则(Dependency Inversion Principle,DIP)

高层模块不应该依赖于低层模块,二者都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。也即是面向接口编程。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 0104练习与思考题-算法基础-算法导论第三版
  • 设计模式:迭代器模式
  • [StartingPoint][Tier1]Pennyworth
  • 【LeetCode热题100】33. 搜索旋转排序数组(二分)
  • Java后端开发中Java 8,JVM和JDK的关系
  • C语言如何声明外部变量?
  • 一条SQL查询语句的执行顺序
  • mysql慢sql排查与分析
  • Blender怎么样启动默认移动和Cavity效果
  • 理解 Golang 变量在内存分配中的规则
  • ics-05-攻防世界
  • 爬取高校专业信息的Python爬虫简介与实践
  • 【C++ STL算法】sort 排序
  • 隐私计算实训营学习七:隐语SCQL的架构详细拆解
  • 数据库的基本操作
  • C# 免费离线人脸识别 2.0 Demo
  • ES2017异步函数现已正式可用
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • JavaScript新鲜事·第5期
  • JavaScript中的对象个人分享
  • maya建模与骨骼动画快速实现人工鱼
  • MySQL用户中的%到底包不包括localhost?
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • swift基础之_对象 实例方法 对象方法。
  • Vue2 SSR 的优化之旅
  • vuex 学习笔记 01
  • 测试如何在敏捷团队中工作?
  • 给新手的新浪微博 SDK 集成教程【一】
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 猴子数据域名防封接口降低小说被封的风险
  • 将 Measurements 和 Units 应用到物理学
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 试着探索高并发下的系统架构面貌
  • 小程序开发中的那些坑
  • 小李飞刀:SQL题目刷起来!
  • 以太坊客户端Geth命令参数详解
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • python最赚钱的4个方向,你最心动的是哪个?
  • # dbt source dbt source freshness命令详解
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (回溯) LeetCode 78. 子集
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (四)模仿学习-完成后台管理页面查询
  • (四)图像的%2线性拉伸
  • (五)IO流之ByteArrayInput/OutputStream
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)http-server应用
  • (转)Mysql的优化设置