程序设计模式七大原则

设计模式 - 创建型模式 上(C++版) 创建型设计模式(C++) 阅读详情

设计模式的目的:

       编写软件过程中,程序员面临着来自耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式是为了让程序,具有更好

1.代码重用性(即:相同功能的代码,不用多次编写)

2.可读性(即:编程规范性,便于其他程序员的阅读和理解)

3.可扩展性(即:当需要增加新的功能时,非常的方便,称为可维护性)

4.可靠性(即:当我们增加新的功能后,对原来的功能没有影响)

5.使程序呈现高内聚,低耦合的特性

设计模式常用的七大原则有:

1.单一职责原则

1.1基本介绍

对类来说的,即一个类应该只负责一项职责。如果A负责两个不同职责:职责1,职责2.当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1,A2

1.2注意事项和细节

(1)降低类的复杂度,一个类只负责一项职责。

(2)提高类的可读性,可维护性

(3)降低变更引起的风险

(4)通常情况下,我们应当遵守单一职责原则,只有逻辑足够简单,才可以在代码级违反单一职责原则;只有类中方法数量足够少,可以在方法级别保持单一职责原则

2.接口隔离原则

2.1基本介绍

客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应该建立在最小的接口上

 

3.依赖倒置原则

3.1基本介绍

高层模块不应该依赖低层模块,二者都应该依赖其抽象

抽象不应该依赖细节,细节应该依赖抽象

依赖倒置的中心思想是面向接口编程

使用接口或抽象类的目的是制定好规范,而不涉及任何具体的操作,把展现细节的任务交给他们的实现类去完成

3.2注意事项和细节

(1)低层模块尽量都要有抽象类或接口,或者两者都有,程序稳定性更好

(2)变量的声明类型尽量是抽象类或接口,这样我们的变量引用和实际对象间,就存在一个缓冲层,利于程序扩展和优化

(3)继承时遵循里式替换原则

4.里式替换原则

4.1基本介绍

继承在给程序设计带来便利的同时,也带来了弊端。比如使用继承会给程序带来侵入性,程序的可移植性降低,增加对象间的耦合性,如果一个类被其他的类所继承,则当这个类需要修改时,必须考虑到所有的子类,并且父类修改后,所有涉及到子类的功能都有可能产生故障,如何正确的使用继承,于是便提出了里式替换原则。

所有引用基类的地方必须能透明地使用其子类的对象

在使用继承时,遵循里式替换原则,在子类中尽量不要重写父类的方法

里式替换原则告诉我们,继承实际上让两个类耦合性增强了,在适当的情况下,可以通过聚合,组合,依赖来解决问题

4.2注意事项和细节

为了子类不重写父类中的方法,通用的做法是:原来的父类和子类都继承一个更通俗的基类,原有的继承关系去掉,采用依赖,聚合,组合等关系代替

5.开闭原则

5.1基本介绍

是编程中最基础、最重要的设计原则

一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节

当软件修改变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化

编程中遵循其他原则,以及使用设计模式的目的就是遵循开闭原则

6.迪米特法则

6.1基本介绍

一个对象应该对其他对象保持最少的了解

类与类关系越密切,耦合度越大

迪米特法则又叫最少知道原则,即一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类不管多么复杂,都尽量将逻辑封装在类的内部。对外除了提供的public方法,不对外泄露任何信息

迪米特法则还有个更简单的定义:只与直接的朋友通信

直接的朋友:每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系,我们就说这两个对象之间是朋友关系。耦合的方式很多,依赖,关联,组合,聚合等。其中,我们称出现成员变量,方法参数,方法返回值中的类为直接的朋友,而出现在局部变量中的类不是直接的朋友。也就是说,陌生的类最好不要以局部变量的形式出现在类的内部

6.2注意事项和细节

核心是降低类之间的耦合

由于每个类都减少不了必要的依赖,因此迪米特法则只是要求降低类间(对象间)耦合关系,并不是要求完全没有依赖关系

7.合成复用原则(补充)

7.1基本介绍

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

实验十一 ——————二层交换基础 实验内容实验网络拓扑图如上所示SW1以及SW2都创建VLAN10和VLAN20,按照上图所示,将接口添加到特定的VLAN;测试PC之间的连通性,要求相同VLAN内的PC能够相互通信要求设置两台交换机名称以及进行特权模式的密码,并允许通过Telnet方式管理交换机实验目的了解二层交换机工作原理掌握交换机基本配置命令理解VLAN的概念,掌握VLAN的配置理解trunk的概念,掌握trunk的配置实验步... 阅读详情

相关推荐

WKWebView 白屏问题,WKWebView request body丢失问题

1,WKWebView 白屏问题 WKWebView 自诩拥有更快的加载速度,更低的内存占用,但实际上 WKWebView 是一个多进程组件,Network Loading 以及 UI Rendering 在其它进程中执行。初次适配 WKWebView 的时候,我们也惊讶于打开 WKWebView 后,App 进程内存消耗反而大幅下降,但是仔细观察会发现,Other Process 的内存占用会...

weixin_37543822的博客 734

软件编程规范总则-4 可读性

 4 可读性¹4-1:注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。说明:防止阅读程序时产生误解,防止因默认的优先级与设计思想不符而导致程序出错。示例:下列语句中的表达式word = (high      (1)if ((a | b) && (a & c))      (2)if ((a | b)        (3)如果书写为hig

博客搬往 http://begtostudy.cnblogs.com 1520

从TL431光耦到集成隔离器:3种反激电源反馈方案全对比,你的项目到底该选哪个?

本文深入对比了反激电源设计中TL431光耦、集成隔离器和原边反馈三种主流反馈方案的优缺点,帮助开发者在电源设计中选择最适合的方案。从精度、成本、隔离等级等多维度分析,为反激式(Flyback)拓扑的应用提供实用选型指南。

weixin_30536513的博客 399

12条通用编程原则✨全面提升Java编码规范性、可读性及性能表现

最好让局部变量作用域最小化,在第一次使用时声明,作用域只在循环时优先使用for循环foreach是迭代器与for循环实现的语法糖,只展示元素屏蔽迭代器与索引,优先使用foreach优先使用JDK、第三方类库,不要自己造轮子精确计算不使用浮点型,可以转换为最小单位使用整形,如果必须要小数部分或计算量超出整形范围使用BigDecimal只有集合、反射时才用包装类,其他情况使用基本数据类型,使用包装类注意空指针和用equals比较字符串适合文本,其他类型合适避免使用字符串。

关注菜菜的后端私房菜,获取更多技术干货~ 1231

SAP公司间外协业务流程以及配置说明

SAP公司间外协业务流程以及配置说明

竹大的博客 7161

BEVFormer与TensorRT的完美结合:如何实现4倍推理加速?

本文详细解析了如何通过TensorRT的量化技术和自定义插件实现BEVFormer模型的4倍推理加速,同时保持精度损失小于1%。文章从模型架构与部署挑战入手,深入探讨了计算图优化、自定义插件开发和量化校准策略,并提供了完整的部署流程和性能调优技巧,为自动驾驶领域的实时3D感知提供了高效解决方案。

bean的博客 220

简图记录-C语言编程规范:可读性、安全性、可移植性

简图记录学习~ 前人已经有大量的资料可供我们参考,任何一家公司、部门、甚至是小组常常都会指定各种规范 大家指定规范常常出于以下原因: 1、针对经验欠缺的新人做编程指导,通过强制一些写法消除容易导致bug的不良习惯。 如 内存的申请释放、数组字符串操作,类型转化等等,主要是安全性保护 2、针对产品的特性,对以往大家开发常犯错的地方加以说明提醒,降低隐患 3、出于对移植需求

runafterhit的博客 1825

Polymarket链上预测市场自动化交易代理开发实战指南

自动化交易代理是量化交易的核心工具,它通过预设的算法规则,自动执行市场分析、决策与下单操作,旨在提升交易效率与纪律性。其技术原理通常涉及实时数据获取、策略引擎计算、交易执行与风险管理等模块的协同工作。在区块链与DeFi领域,这类代理的价值尤为凸显,能够高效处理链上合约交互,捕捉去中心化市场的套利机会。具体到应用场景,链上预测市场如Polymarket,为自动化策略提供了丰富的博弈标的。本文以Polymarket交易代理项目为例,深入剖析其基于Node.js与ethers.js的技术栈实现,详解从环境配置、策

weixin_42533910的博客 581

软件设计中的可用性

软件设计中的可用性(转载自微软站点,原文地址:http://www.microsoft.com/China/msdn/msdnonline/features/articles/uidesign.ASP)摘要:本文介绍了可用性的概念,说明为什么可用性应当是所有软件设计项目中的一个重要部分。目录 简介 可用性定义 常见问题 资源 ------------------------------------

kingzeus的专栏 1677

有道龙虾LobsterAI vs. OpenClaw:对比与安装部署攻略

LobsterAI是"中国版OpenClaw",更注重易用性和中文场景适配;OpenClaw是技术极客的玩具,需要大量命令行操作。

lpfasd123的博客 2393

070、人脸AE实战:基于人脸检测的亮度优先与背光补偿算法

本文分享了基于人脸检测的亮度优先与背光补偿算法的实战经验。针对逆光自拍场景下人脸过曝问题,作者提出了动态平衡方案: 通过内缩20%的人脸核心区域提取亮度,避免背景干扰 创新性地采用"亮度差+置信度"的背光判定机制 设计动态权重分配策略,人脸权重可在30%-70%间调整 引入平滑处理防止亮度跳变,补偿增益限制在1.5倍以内 关键点在于:不是简单提亮人脸,而是通过分析人脸与背景亮度差,在80-110目标亮度范围内动态调整,实现自然的人脸曝光效果。算法已在实际项目中验证,解决了传统AE在逆光场景下的失效问题。

zzfmlxs的博客 31

程序员必备的21种“设计模式之道”!

设计模式也是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式的目的就是为了重用代码、让代码更容易被他人理解、保证代码可靠性。欢迎小伙伴们关注,持续分享更多优质干货! 设计模式之道 何为设计模式? 设计模式的分门别类 1、原型(Prototype)模式 2、工厂方法(Factory Method)模式 3、抽象工厂(AbstractFactory) 模式 4、单例(Singleton)设计模式 5、生成器(Builder)模式 6、适配器(Adapter .

累计发表博客60余万字,优快云 博客专家、Java 领域优质创作者、华为云享专家、阿里云专家博主。专注分享 Java 优质文章,毕设实战项目开发,全网粉丝10W+ 5107

如何使用VNC对openEuler系统进行远程图形化操作

本文详细介绍了在openEuler系统中配置VNC远程图形化操作的方法。主要内容包括:1)服务端配置:安装GNOME图形界面和TigerVNC服务,创建VNC用户并设置密码,配置VNC服务启动脚本;2)客户端连接:使用VNC Viewer等工具连接服务器;3)常见问题解决方法。通过5901端口建立连接后,用户可远程操作openEuler图形界面,适用于需要图形化管理的场景。

2501_93651177的博客 313

【设计模式】程序设计的七大原则

一、设计模式的目的 编写软件过程中,程序员面临着来自耦合性、内聚性以及可维护性。可扩展性、重用性、灵活性等多方面的挑战,设计模式时为了让程序具有更好的: 代码重用性 可读性 可扩展性 可靠性 使程序呈现高内聚。低耦合的特性 二、程序设计七大原则 设计模式的原则其实就是程序员在编程时应当遵循的原则,也是各种设计模式的基础 设计模式常用的七大原则: 单一职责原则 接口隔离原则 依赖倒转原则 里氏替换原则 开闭原则 迪米特法则 合成复用原则 1、单一职责原则 基本介绍 对类来说的,即一个类应该只负责一项职

梓莘 981

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

程序设计模式的七大设计原则

文章目录前言一、二、三、四、五、六、七、总结 前言 本篇文章讲述设计模式的七大原则。 一、 二、 三、 四、 五、 六、 七、 总结 每天都在学习Java的道路上不断奔波,加油Java人。

D. 397

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

面向对象程序设计的七大设计原则-(设计模式)

转载自:https://www.cnblogs.com/ahao214/p/9879104.html 详细介绍:https://blog.youkuaiyun.com/qq_34760445/article/details/82931002 1、单一职责原则 定义: 一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 单一职责原则是实现高内聚、低耦合的指导方针,是最简单却最难运用的原则,需要...

sindyra的博客 483

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

设计模式七大原则精炼版(转载)

https://www.cnblogs.com/WindSun/p/10223080.html

一个老头子 155

面试官问你如何进行程序设计?——设计模式之七大原则——单一职责、里氏代换、开闭原则、依赖倒转以及C++简单实现

工人方法模式工人方法模式1、背景2、定义3、特征4、应用参考 工人方法模式 1、背景 2、定义 3、特征 4、应用 参考

JMW1407的博客 2268

面试官问你如何进行程序设计?——设计模式之七大原则——接口隔离、合成复用、迪米特法则以及C++设计实现

设计模式的设计原则七大原则5、接口隔离(interface segregation principle)5.1、背景5.2、定义5.3、特征5.4、应用6、迪米特原则(law of demeter )6.1、背景6.2、定义6.3、特征6.4、应用7、合成复用原则(Composite Reuse Principle, CRP)7.1、背景7.2、定义7.3、特征7.4、应用参考 七大原则 设计原则名称 作用 单一职责原则 类的职责要单一,不能将太多的职责放在一个类中 开闭原则 软件实体对

JMW1407的博客 1434

23种程序设计模式与7大设计原则

23种程序设计模式

qq_51533426的博客 406

【大神之路】大话设计模式 - 设计模式与七大原则

文章目录一、设计模式 - Design Patterns1、设计模式的前世今生2、设计模式的基本要素3、GoF 的 23 设计模式二、程序设计七大原则 (7 Principles)1、开篇2、开闭原则 - OCP3、里氏替换原则 - LSP4、依赖倒置原则 - DIP5、单一职责原则 - SRP6、接口隔离原则 - ISP7、迪米特法则 / 最少知识原则 - LoD / LKP8、合成复用原则 - CRP三、小结 一、设计模式 - Design Patterns 1、设计模式的前世今生 “设计模式” 并不是

JAVA_C90的博客 755

设计模式总结二

设计模式七大原以及23种设计模式分类:

刘一儿(嵌入式) 305

设计模式——知识目录

目录设计模式七大原则单一职责原则 (Single Responsibility Principle)接口隔离原则 (Interface Segregation Principle)依赖倒转原则 (Dependence Inversion Principle)里氏替换原则 (Liskov Substitution Principle) 设计模式七大原则 单一职责原则 (Single Responsi...

minge0001的博客 315

设计模式的七大原则

设计模式的目的:在编写软件的过程中,程序员面临着来之耦合性,内聚性以及可维护性,可扩展性,重用性,灵活性等多方面的挑战,设计模式的好处是为了让程序具有如下特点: 代码重用性(即:相同功能的代码,不用多次编写) 可读性(即:程序规范性,便于其他程序员的阅读和理解) 可扩展性(即:当需要增加新的功能时,非常的方便) 可靠性(即:我们对程序增加新的功能的时候,对原来的功能没有影响) 可维护性(即:我们转让项目的时候,别人能很快的上手自己的项目) 最终目的是使程序呈现高内聚,低耦合的特性。 设计模式的七

煜城的博客 491

java设计模式原则——合成复用原则

设计模式回顾: 1.java设计模式 2.java设计模式原则——单一职责原则 3.java设计模式原则——接口隔离原则 4.java设计模式原则——依赖倒置原则 5.java设计模式原则——里氏替换原则 6.java设计模式原则——开闭原则 7.java设计模式原则——迪米特法则 设计模式demo示例下载 基本介绍 原则是尽量使用合成/聚合的方式,而不是使用继承。 图中所示,AB两个类,B类要使用A类中的三个方法,我们可以选择让B去继承A类,但是这样做有一个问题,会让A和B的耦合性增强,不利于程序的扩展

u014627852的博客 473

【设计模式】设计模式原则

代码的重用性:相同功能的代码,不用多次编写 可读性:编程的规范性,便于其他程序员的阅读和理解 可扩展性:当我们需要增加新的功能是,非常的方便 可靠性:当我们增加新的功能后,对员原来的功能没有影响 使程序呈现高内聚,低耦合的特性 设计模式的七大原则: 单一职责原则 一个类只有一个作用,只负责一方面的事情,最次一个类中的一个方法,只能解决一个问题 降低类的复杂度 提高类的可读...

一键一键敲代码 229
上一篇: APP跳转微信小程序,跳转微信公众号
下一篇: Android创建签名文件,并获取签名文件MD5,SHA1,SHA256值
SuperMonsterH
博客等级 码龄9年 11粉丝 60原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuperMonsterH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值