重修设计模式-设计原则

重修设计模式-设计原则

设计原则

设计原则是软件编码时所遵循的规则,旨在帮助开发者创建出既满足功能需求又易于维护、可扩展且美观的设计,理解设计原则可以提升代码质量、减少错误以及促进团队协作,但对设计原则的理解要灵活,不要拿原则当真理,生搬硬套会适得其反。

SOLID原则:

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

    A class or module should have a single responsibility.

    一个类或者模块只负责完成一个职责。

    这有助于降低系统的复杂性,提高代码的可读性和可维护性。当需求变更时,只需要修改负责该职责的类或模块即可。

  • O开闭原则(Open-Closed Principle, OCP)

    software entities (modules, classes, functions, etc.) should be open for extension , but closed for modification.

    软件实体(模块、类、方法等)应该“对扩展开放、对修改关闭。

    意味着软件应该通过添加新的代码来扩展,而不是通过修改现有的代码来实现,有助于保持系统的稳定性和可维护性。

  • L里式替换原则(Liskov Substitution Principle, LSP)

    Functions that use pointers of references to base classes must be able to use objects of derived classes without knowing it.

    子类对象能够替换程序中父类对象出现的任何地方,并且保证原来程序的逻辑行为不变及正确性不被破坏。

    里式替换和多态有点类似,但它们关注的角度不一样:多态是面向对象编程的一大特性,也是面向对象编程语言的一种语法,是一种代码实现的思路。而里式替换是一种设计原则,是用来指导继承关系中子类该如何设计的,子类的设计要保证在替换父类的时候,不改变原有程序的逻辑以及不破坏原有程序的正确性。

  • I接口隔离原则(Interface Segregation Principle, ISP)

    Clients should not be forced to depend upon interfaces that they do not use.

    客户端不应该被强迫依赖它不需要的接口。其中的“客户端”,可以理解为接口的调用者或者使用者。

    一个类对另一个类的依赖应该建立在最小的接口上。有助于减少接口的污染和不必要的依赖,提高系统的灵活性和可维护性。

  • D依赖倒置原则(Dependency Inversion Principle, DIP)

    High-level modules shouldn’t depend on low-level modules. Both modules should depend on abstractions. In addition, abstractions shouldn’t depend on details. Details depend on abstractions.

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

    抽象不应该依赖细节。

    细节应该依赖抽象。

    有助于减少模块间的耦合度,提高系统的灵活性和可维护性。

    在 Java 中的表现是:

    • 模块间的依赖通过抽象发生,实现类之间不发生直接的依赖关系,其依赖关系是通过接口或抽象类产生的;

    • 接口或抽象类不依赖于实现类;

    • 实现类依赖接口或抽象类。

    举例,不符合依赖导致原则的类依赖关系:
    在这里插入图片描述
    符合后:

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

Each unit should have only limited knowledge about other units: only units “closely” related to the current unit. Or: Each unit should only talk to its friends; Don’t talk to strangers.

每个模块只应该了解那些与它关系密切的模块的有限知识。或者说,每个模块只和自己的朋友“说话”,不和陌生人“说话”。

迪米特法则也叫最小知识原则:The Least Knowledge Principle。

不该有直接依赖关系的类之间,不要有依赖。有依赖关系的类之间,尽量只依赖必要的接口。迪米特法则希望减少类之间的耦合,让类越独立越好,缩小功能改动导致的代码改动范围,有助于代码“高内聚,低耦合”。

  • 高内聚:相近的功能应该放到同一个类中。

  • 低耦合:类与类之间的依赖关系简单清晰,即使两个类有依赖关系,一个类的代码改动也不会或者很少导致依赖类的代码改动

KISS原则

Keep It Simple and Stupid.

尽量保持简单。

强调设计应该保持简单,避免过度复杂。简单的设计更容易理解、维护和扩展。

YAGNI 原则

You Ain’t Gonna Need It.

你不会需要它。

在软件开发中,不要去设计当前用不到的功能;不要去编写当前用不到的代码。实际上,这条原则的核心思想就是:不要做过度设计。

DRY原则

Don’t Repeat Yourself.

不要重复你自己。

重复包括以下几种情况:

  1. 代码实现重复:两个方法中大部分代码相同,只有小部分差异。

    看是否能抽出通用方法,但也要注意“单一职责原则”和“接口隔离原则”。

  2. 功能语义重复:两个方法的实现不同,但方法名语义相同。

  3. 执行重复:代码执行时,某一代码块执行冗余。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/144595.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

佩戴舒适且适合学生党的蓝牙耳机?分享开放式耳机排行榜前十名

对于追求佩戴舒适的学生党来说,高性价比的开放式耳机是一个不错的选择。因为这类耳机不仅提供了良好的通风性,还减少了长时间佩戴带来的闷热感。而且开放式耳机也通常具有轻巧的设计,能够减轻了耳朵的压力。而且,还需要考虑到学生…

CO82-工單號碼段配置

可以通過CO82查看工單號碼段。 配置工單號碼段: 1、首先配置一個號碼段。 2、將工單類型分配給號碼段。 此時工單類型ZP01號碼段即為41W000000-41W999999 3、可以點擊概覽按鈕,查看概覽。 可以看到不同號碼段下的所有工單類型。 *然後在前台就可以對Z…

怎么测开关电源效率?电源效率标准是多少?

在追求电子产品高性能与低功耗的今天,开关电源的效率成为了衡量其性能的一项重要指标。提高开关电源的效率,对于保障电子设备的稳定性和延长使用寿命具有重要意义。今天将为大家介绍开关电源效率的测试方法以及在不同负载条件下电源的效率标准。 一、开关…

「Netmarble 小镇」活动来了:踏上穿越标志性世界的旅程!

欢迎来到 Netmarble 小镇!本次活动从 9 月 13 日持续到 10 月 11 日,是你们体验 Netmarble 著名游戏世界最精彩内容的入口。在为期一个月的庆祝活动中,你们将体验到独家内容、惊险刺激的挑战和全新人物化身的发布! 探索 Netmarble…

高校宿舍电费管理怎么实现

1引言 在大学的象牙塔里,宿舍不仅是学子们休憩的港湾,更是青春记忆的重要载体。然而,随着科技的发展与生活习惯的改变,宿舍内的电器设备日益增多,电费管理成为了一个不可忽视的问题。本文将从高校宿舍电费管理的现状出…

【AI小项目6】QLoRA针对资源受限设备上的大模型微调和文本分类任务的推理

目录 一、项目简介概述时间主要工作和收获技术栈数据集结果参考 二、训练阶段的完整代码什么是 QLoRA 微调?注意 安装库导入包配置定义一个Config类配置训练参数配置Lora 初始化分词器和模型数据预处理计算模型评估指标交叉验证划分数据集举例: 创建Trai…

mycat双主高可用架构部署-ER表

MySQL5.7服务器IP是192.168.31.209及192.168.31.210 vi /usr/local/mycat/conf/schema.xml <?xml version"1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat"http://io.mycat/"><schema n…

Java通信协议—TCP协议上传文件(完整详解,附有案例+代码)

TCP协议上传文件 文章目录 TCP协议上传文件1.需求2.代码实现 1.需求 客户端&#xff1a;将本地文件上传到服务器。接收服务器的反馈。 服务器&#xff1a;接收客户端上传的文件&#xff0c;上传完毕之后给出反馈。 2.代码实现 public class Server {public static void main(…

fastson与jackson入门

一&#xff0c;简介 json: JavaScript Object Notation, JS对象简谱。 官网&#xff1a;JSON官网 二&#xff0c;使用场景 网络传输 ​ 描述同样的信息&#xff0c;json相比xml占用更少的空间, <?xml version"1.0" encoding"uTF-8"?> <pers…

电气自动化入门03:安全用电

视频链接&#xff1a;2.1 电工知识&#xff1a;触电原因与防触电措施_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW/?p4&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.电流对人体的危害 电击&#xff1a;电流通过人体。 电伤&#xff1a;电流热效应…

魅族20机型 M2381“工程固件”作用分析以及写入步骤

在上期的博文中简单说明了工程固件的作用。对于资深玩家来说写入工程固件可以调试参数或者格机 误檫除全分区后的底层修复,但对于一般玩家来说不推荐写入。固件本身的作用是修复与调校。有些操作是不可逆。工程固件实际是用于机型开发到量产中帮助开发人员检查和修复软件中的问…

小米机型“工程固件” 小米13工程资源预览 写入以及nv损坏修复

目前各大品牌机型中。可以录数于小米机型的工程固件最全 最多。这个也由于小米机型的加密机制比较特殊 。每款新机型发布后不久。工程包就会出现。从小米5起始以及红米note4起始都有工程固件。另外在维修行业中。米系机型更换cpu都需要先写入对应的绑定包。然后才可以写入官方m…

Windows如何查看已缓存的DNS信息

Windows server 2016如何查看已缓存的DNS信息 在Windows server 2016系统下&#xff0c;如何查看已缓存的DNS信息呢? 1.打开“运行”&#xff0c;输入cmd&#xff0c;点击“确定” 2.在命令行界面输入ipconfig /displaydns&#xff0c;按回车即可查看已缓存的dns信息

企业如何做好B站信息流广告投放?

B站作为年轻人喜爱的视频分享平台&#xff0c;以其独特的弹幕文化、丰富的视频内容和活跃的社区氛围&#xff0c;成为了众多企业竞相追逐的流量高地。B站信息流广告凭借其精准投放、高互动性和强大的用户粘性&#xff0c;成为了企业实现营销目标的重要渠道。 一、B站信息流广告…

JSONC:为JSON注入注释的力量

JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;广泛应用于Web开发、配置文件和数据存储等领域。 其简洁的语法和易于解析的特点&#xff0c;使得JSON成为了现代编程中不可或缺的一部分。然而&#xff0c;JSON的一个显著缺点是…

美创科技唯一入选安全领域数字工程服务商并获“四星”评定!

近日&#xff0c;第二批浙江省数字工程服务商&#xff08;企业数字化转型服务商&#xff09;星级评价结果公布&#xff0c;美创科技入围“四星级-安全-数字工程服务商”。 评审专家对美创科技研发能力、技术与创新能力等6个维度均给予高分评定&#xff0c;数字工程服务商能力分…

Android 车载应用开发指南 - CarService 详解(下)

车载应用正在改变人们的出行体验。从导航到娱乐、从安全到信息服务&#xff0c;车载应用的开发已成为汽车智能化发展的重要组成部分。而对于开发者来说&#xff0c;如何将自己的应用程序无缝集成到车载系统中&#xff0c;利用汽车的硬件和服务能力&#xff0c;是一个极具挑战性…

BPG的定义和工作原理是什么?

在当今互联网中&#xff0c;网络通信的关键角色之一是BGP&#xff08;边界网关协议&#xff09;。BGP是一种路由矢量协议&#xff0c;负责在自治系统之间交换路由信息&#xff0c;并帮助数据包找到通过网络的理想链路。本文将介绍BGP、BGP4和BGP4&#xff0c;以及它们在网络中的…

深入探索Android开发之Kotlin核心技术学习大全

Android作为全球最流行的移动操作系统之一&#xff0c;其开发技能的需求日益增长。本文将为您介绍一套专为Android开发者设计的Kotlin核心技术学习资料&#xff0c;包括详细的学习大纲、PDF文档、源代码以及配套视频教程&#xff0c;帮助您从Kotlin基础到高级特性&#xff0c;再…

观《中国数据库前世今生》有感:从历史中汲取未来的力量

观《中国数据库前世今生》有感&#xff1a;从历史中汲取未来的力量 中国数据库技术的起步与发展 观看了《中国数据库前世今生》后&#xff0c;我对于中国数据库技术的历史变迁有了更深刻的理解。作为一名有一年开发经验的程序员&#xff0c;这部纪录片让我对中国数据库行业从8…