7种设计坏味道和11种原则

接口设计的原则:构建优雅API的完整指南 接口设计是定义系统不同组件之间交互方式的过程。它包括方法签名、参数定义、返回值、异常处理等方面的设计。好的接口设计能够隐藏实现细节,提供清晰的调用方式。每个接口应该只负责一个明确的功能,不应该承担多个不相关的职责。这是接口设计的基础原则。接口应该对扩展开放,对修改关闭。设计时要考虑未来的扩展需求,避免频繁修改已有接口。子类对象应该能够替换父类对象,而不影响程序的正确性。接口的实现类应该完全遵循接口的契约。不应该强迫客户依赖于它们不使用的方法。设计小而专一的接口,而不是大而全的接口。 阅读详情
  7种设计坏味道
1.僵化性: 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动。

2.脆弱性: 对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。

3.牢固性: 很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。

4.粘滞性: 做正确的事情比做错误的事情要困难。

5.复杂性(不必要的): 设计中包含有不具任何直接好处的基础结构。

6.重复性(不必要的): 设计中包含有重复的结构,而该重复的结构本可以使用单一的抽象进行统一。
  7.晦涩性: 很难阅读、理解。没有很好地表现出意图。

11种原则 - Principle

----类原则

1.单一职责原则 - Single Responsibility Principle(SRP)

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

(职责即为“变化的原因”。)

2.开放-封闭原则 - Open Close Principle(OCP)

软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改。

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

关键是抽象.将一个功能的通用部分和实现细节部分清晰的分离开来.

开发人员应该仅仅对程序中呈现出频繁变化的那些部分作出抽象.

拒绝不成熟的抽象和抽象本身一样重要. )

3.里氏替换原则 - Liskov Substitution Principle(LSP)

子类型(subclass)必须能够替换掉它们的基类型(superclass)。

4.依赖倒置原则(IoCP) 或 依赖注入原则 - Dependence Inversion Principle(DIP)

抽象不应该依赖于细节。细节应该依赖于抽象。

(Hollywood原则: "Don't call us, we'll call you".

程序中所有的依赖关系都应该终止于抽象类和接口。

针对接口而非实现编程。

任何变量都不应该持有一个指向具体类的指针或引用。

任何类都不应该从具体类派生。

任何方法都不应该覆写他的任何基类中的已经实现了的方法。)

5.接口隔离原则(ISP)

不应该强迫客户依赖于它们不用的方法。

接口属于客户,不属于它所在的类层次结构。

(多个面向特定用户的接口胜于一个通用接口。)

----包内聚原则

6.重用发布等价原则(REP)

重用的粒度就是发布的粒度。

7.共同封闭原则(CCP)

包中的所有类对于同一类性质的变化应该是共同封闭的。

一个变化若对一个包产生影响,

则将对该包中的所有类产生影响,

而对于其他的包不造成任何影响。

8.共同重用原则(CRP)

一个包中的所有类应该是共同重用的。

如果重用了包中的一个类,

那么就要重用包中的所有类。

(相互之间没有紧密联系的类不应该在同一个包中。)

----包耦合原则

9.无环依赖原则(ADP)

在包的依赖关系图中不允许存在环。

10.稳定依赖原则(SDP)

朝着稳定的方向进行依赖。

应该把封装系统高层设计的软件(比如抽象类)放进稳定的包中,

不稳定的包中应该只包含那些很可能会改变的软件(比如具体类)。

11.稳定抽象原则(SAP)

包的抽象程度应该和其稳定程度一致。

(一个稳定的包应该也是抽象的,一个不稳定的包应该是抽象的. )

----其它扩展原则----

12.BBP(Black Box Principle)黑盒原则

多用类的聚合,少用类的继承。

13.DAP(Default Abstraction Principle)缺省抽象原则

在接口和实现接口的类之间引入一个抽象类,这个类实现了接口的大部分操作.

14.IDP(Interface Design Principle)接口设计原则

规划一个接口而不是实现一个接口。

15.DCSP(Don't Concrete Supperclass Principle)不要构造具体的超类原则

避免维护具体的超类。

16.迪米特法则
一个类只依赖其触手可得的类。
Cursor赋能Qt C++:从环境配置到项目构建的AI开发新范式 本文详细介绍了如何利用Cursor工具链提升Qt C++开发效率,从智能环境配置到CMake项目构建的全流程实践。通过AI辅助编程、Qt生态优化及高级调试技巧,开发者可快速完成从传统开发到AI驱动的新范式转换,显著缩短项目搭建时间并提升代码质量。 阅读详情

相关推荐

保姆级教程:在摩尔线程MTT S80上快速部署Ollama运行DeepSeek R1模型(附性能测试)

本文提供了一份详细的保姆级教程,指导用户在摩尔线程MTT S80显卡上部署Ollama并运行DeepSeek R1模型。内容涵盖从驱动安装、Docker环境配置到模型拉取、性能测试的全流程,并分享了实测数据与优化技巧,旨在帮助开发者快速在国产GPU平台上实现高效的大语言模型推理。

weixin_29091837的博客 525

接口设计六大原则

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33841503的博客 2022

手把手教你设计热电偶信号采集电路:从运放选型到ADC配置全流程

本文详细解析了热电偶信号采集电路的设计全流程,重点涵盖从高精度运放选型、差分放大电路设计到ADC配置与软件处理的工程实践。针对热电偶输出的微弱毫伏级差分信号,文章深入探讨了如何克服噪声、实现冷端补偿,并提供了具体的器件选型建议与电路调试技巧,旨在帮助工程师构建稳定可靠的高精度温度测量系统。

weixin_29169899的博客 425

如何优雅的进行接口设计?接口设计的六大原则是什么?

如何优雅的进行接口设计?接口设计的六大原则是什么?本文关于如何优雅的进行接口设计?接口设计的六大原则是什么?作为后端开发,不管是什么语言,JavaGo还是C++,其背后的后端思想都是类似的。后面打算出一个后端思想的技术专栏,主要包括后端的一些设计、或者后端规范相关的,希望对大家日常工作有帮助哈。我们做后端开发工程师,主要工作就是:如何把一个接口设计好。所以,今天就给大家介绍,设计好接口的36个锦囊。1. 接口参数校验入参出参校验是每个程序员必备的基本素养。你设计的接口,必须先校验参数。

weixin_19970108018的博客 2787

VisionMaster -Group循环、数组数据格式化

这里创建一个格式化工具,按照自己想要的模式格式化刚刚输出的数据。因为是检测多个物体,所以这里选择输出的是数组。第一次的模板很不满意,反复调整参数也没好,边缘不整齐,强迫症患者受不了。实测如果输入设置太多,会导致模块失效,所以尽量选择需要的少量参数。这里要打开循环使能,循环数值就是高精度匹配的匹配个数。Group输出设置里选择刚刚建立的数据集。左边是主流程,右边是组合模块内部流程。修改采图这里的曝光值,图像提亮一点。建一个数据集,把想要的数据收集起来。用TCP助手测试一下OK。成功得到了想要的数据。

weixin_69505365的博客 4531

用人话讲明白线性回归LinearRegression

目录 什么是回归 一元线性回归 损失函数 最小二乘估计 小结 1. 什么是回归 当我们学习一门新课程、接触一个新专业时,总会对该领域的专有名词感到困惑,甚至看完解释仍难以理解其含义。在我们一起学习machine learning的过程中,我会尽量对相关名词用“人话”做一遍解释,以减少学习的“痛苦感”。 譬如今天要学的线性“回归”,这个回归(regression)和我们平时说的“回归祖国”的回...

化简可得 1万+

接口设计原则

1、单一原则 一个类只负责一个功能领域的相应职责,或者可以定义为,就一个类而言,应该只有一个引起它变化的原因。 单一原则的实现,完全取决于你这么抽象的看待这个问题,你抽象的合适,那么它可以很棒,如果抽象的不够,它可能就是臃肿的类,抽象的过多,有可能创造出一大把寄生类。 单一职责原则这话就像我们常听的那句"做人要坚持"。听起来无懈可击,但是要坚持什么呢,如果这事情看起来不靠谱,做...

永生只是一场幻梦 8604

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

AI 时代嵌入式工程师的能力模型与学习路线:全系列收官

weixin_42162924的博客 40

每个程序员都应牢记的7种坏味道,11种原则,23种模式

每个程序员都应牢记的7种坏味道,11种原则,23种模式 (一)7种设计坏味道 1.僵化性: 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动。 2.脆弱性: 对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。 3.牢固性: 很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。 4.粘滞性: 做正确的事情比做错误的事情要困难。 5....

梁飞的博客 2496

Mysql授权允许远程访问

前言 Mysql授权允许远程登录后,linux中安装的mysql可以与Navicat for Mysql(可视化)等连接,在可视化软件下管理数据库。 注意:不能使用临时密码 设置密码命令: alter user 'root'@'localhost' identified by '这里是你的密码'; 授权允许远程访问 一、授权命令: grant all privileges on *.* to '...

🏆 前端领域优质创作者 3万+

数据分析必问:Pandas面试题及参考答案

DataFrame是Pandas库中的一个核心数据结构,它类似于Excel中的表格,可以存储不同类型的数据。在Pandas中,抽样操作通常很简单,但是需要根据数据的特点和分析的需求来选择合适的抽样方法。数据标准化和归一化是数据预处理中常用的技术,目的是将数据调整到一个合适的范围内,以消除不同特征量纲和数值范围的差异,从而保证模型训练的有效性。CSV文件是一种文本文件,其中的数据以逗号分隔。不平衡数据集指的是数据集中各类别样本的数量差异较大的情况,这可能导致模型训练出现偏差,影响模型的泛化能力。

大模型大数据攻城狮的专栏 3009

设计模式——7种坏味道和11种设计原则

设计模式作为一组抽象的设计思想,肯定有一些基本的原则。否则的话,任何设计都可以称之为”良好设计”的一种了。 在设计模式中,也有整体“不允许”和“需要遵循”的方方面面。只要遵循了下面这些基本思想,写出来的设计往往都是很优秀的设计。 7种坏味道 僵化性:说白了就是整个系统过于僵硬,没办法或很难针对其中的某个需要修改的地方做灵活的调整,牵一发而动全身。 脆弱性:这次可以调整了,但是仍然关联性太强,一个位置的小调整竟然会导致一堆逻辑上毫无关联的位置出现新的问题。 牢固性:系统从一开始逻辑关联就设计得过于紧密。这次系

userkang的博客 417

全球APN信息汇总

全球APN信息,电信APN,移动APN,联通APN,台湾APN,马来西亚APN,俄罗斯APN,日本APN,泰国APN,美国APN,英国APN,法国APN,德国APN,意大利APN,葡萄牙APN,土耳其APN,荷兰APN,丹麦APN,比利时APN,爱尔兰APN,新加坡APN,越南APN,老挝APN,菲律宾APN,印尼APN,泰国APN,柬埔寨APN,巴基斯坦APN,印度APN,奥地利APN,保加利亚APN,捷克APN,立陶宛APN,罗马尼亚APN,挪威APN,希腊APN,匈牙利APN,瑞士APN,乌克兰APN

renkai721的专栏 2796

关于设计模式的7种坏味道和11种原则

设计模式作为一组抽象的设计思想,肯定有一些基本的原则.否则的话,任何设计都可以称之为"良好设计"的一种了. 在设计模式中,也有整体"不允许"和"需要遵循"的方方面面.只要遵循了下面这些基本思想,写出来的设计往往都是很优秀的设计. 7种坏味道 僵化性: 说白了就是整个系统过于僵硬,没办法或很难针对其中的某个需要修改的地方做灵活的调整,牵一发而动全身. 脆弱性:

云彩挂上的二叉树 1643

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

OO软件设计中的7种坏味道,11种原则,23种模式

<br />一、7种设计坏味道<br />1.僵化性: 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动。 <br />2.脆弱性: 对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。 <br />3.牢固性: 很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。 <br />4.粘滞性: 做正确的事情比做错误的事情要困难。 <br />5.复杂性(不必要的): 设计中包含有不具任何直接好处的基础结构。 <br />6.重复性(不必要的): 设计中包含有重复的结构

VIC Hakuna Matata 1435

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

接口设计的 11 种原则

 7种设计坏味道 1.僵化性: 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动。 2.脆弱性: 对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。 3.牢固性: 很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。 4.粘滞性: 做正确的事情比做错误的事情要困难。 5.复杂性(不必要的): 设计中包含有不具任何直接好处的基础结构。 6.重复性(不必要的

vingo888的专栏 6768

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

7种坏味道,11种原则,23种模式

(一)7种设计坏味道 1.僵化性: 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动。 2.脆弱性: 对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。 3.牢固性: 很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。 4.粘滞性: 做正确的事情比做错误的事情要困难。 5.复杂性(不必要的): 设计中包含有不具任何直接好处的基...

liuxinglanyue的专栏 195

每个程序员都应理解的7种坏味道,11种原则,23种模式

每个程序员都应理解的7种坏味道,11种原则,23种模式(一)7种设计坏味道1.僵化性: 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动。 2.脆弱性: 对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。 3.牢固性: 很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。 4.粘滞性: 做正确的事情比做错误的事

亿言 1565
上一篇: oracle中进行简单树查询(递归查询) ,PRIOR、CONNECT_BY_ROOT的使用
下一篇: Java 接口大全、面向接口编程、什么时候使用接口。选择Java接口还是抽象类
jackpk
博客等级 码龄19年 326粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值