设计模式 七大原则

20399137a42a48fc8ad9c6dea1b83a12.jpg1.单一职责原则

 

 

  单一职责原则(SRP:Single responsibility principle)又称单一功能原则

 

  核心:解耦和增强内聚性(高内聚,低耦合)。

 

  描述:

 

    类被修改的几率很大,因此应该专注于单一的功能。如果你把多个功能放在同一个类中,

 

    功能之间就形成了关联,改变其中一个功能,有可能中止另一个功能,这时就需要新一轮的测试来避免可能出现的问题。

 

2.里氏替换原则

 

  里氏替换原则(LSP:Liskov Substitution Principle)

 

  核心:

 

    在任何父类出现的地方都可以用他的子类来替代(子类应当可以替换父类并出现在父类能够出现的任何地方)

 

  四层含义:

 

    (1)子类必须完全实现父类的方法。在类中调用其他类是务必要使用父类或接口,如果不能使用父类或接口,则说明类的设计已经违背了LSP原则。

 

    (2)子类可以有自己的个性。子类当然可以有自己的行为和外观了,也就是方法和属性

 

    (3)覆盖或实现父类的方法时输入参数可以被放大。即子类可以重载父类的方法,但输入参数应比父类方法中的大,这样在子类代替父类的时候,调用的仍然是父类的方法。

 

    即以子类中方法的前置条件必须与超类中被覆盖的方法的前置条

 

    件相同或者更宽松。

 

     (4)覆盖或实现父类的方法时输出结果可以被缩小。

 

3.依赖注入原则

 

  依赖注入原则(DIP:Dependence Inversion Principle)

 

  别名:依赖倒置原则或依赖反转原则

 

  核心:要依赖于抽象,不要依赖于具体的实现

 

  三层含义:

 

    (1)高层模块不应该依赖低层模块,两者都应该依赖其抽象(抽象类或接口);

 

    (2)抽象不应该依赖细节(具体实现);

 

    (3)细节(具体实现)应该依赖抽象。

 

  三种实现方式:

 

     1、通过构造函数传递依赖对象 ;

 

    2、通过setter方法传递依赖对象;

 

    3、接口声明实现依赖对象 在Java中的表现: 

 

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

 

    (2)接口或抽象类不依赖于实现类;  

 

    (3)实现类依赖接口或抽象类

 

4.开闭原则

 

  开闭原则(OCP:Open Closed Principle)

 

  核心思想:对扩展开放,对修改关闭。即在设计一个模块的时候,应当使这个模

 

    块可以在不被修改的前提下被扩展。

 

    根据开闭原则,在设计一个软件系统模块(类,方法)的时候,应该可以在不修改原有的模块(修改关闭)的基础上,能扩展其功能(扩展开放)。

 

  扩展开放:

 

    某模块的功能是可扩展的,则该模块是扩展开放的。软件系统的功能上的可扩展性要求模块是扩展开放的。

 

  修改关闭:

 

    某模块被其他模块调用,如果该模块的源代码不允许修改,则该模块修改关闭的。软件系统的功能上的稳定性,持续性要求是修改关的。

 

5.接口分离原则

 

  接口分离原则(ISP:Interface Segregation Principle)

 

  核心思想:

 

    不应该强迫客户程序依赖他们不需要使用的方法。

 

    接口分离原则的意思就是:一个接口不需要提供太多的行为,一个接口应该只提供一种对外的功能,不应该把所有的操作都封装到一个接口当中.

 

  分离接口的两种实现方法:

 

    1.使用委托分离接口。(Separation through Delegation)

 

    2.使用多重继承分离接口。(Separation through Multiple Inheritance)

 

6.合成复用原则

 

  合成复用原则(CRP:Composite Reuse Principle)

 

  核心思想:

 

    尽量使用对象组合,而不是继承来达到复用的目的。该原则就是在一个新的对象里面使用一些已有的对象,

 

    使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的。

 

  复用的种类:

 

    1.继承

 

    2.合成聚合

 

    注:在复用时应优先考虑使用合成聚合而不是继承

 

7.迪米特原则

 

  迪米特原则(LOD:Law of Demeter)

 

  又叫最少知识原则

 

  核心思想:

 

    一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。

 

    (类间解耦,低耦合)意思就是降低各个对象之间的耦合,提高系统的可维护性;在模块之间只通过接口来通信,

 

    而不理会模块的内部工作原理,可以使各个模块的耦合成都降到最低,促进软件的复用

 

  注:

 

    1.在类的划分上,应该创建有弱耦合的类;

 

    2.在类的结构设计上,每一个类都应当尽量降低成员的访问权限;

 

    3.在类的设计上,只要有可能,一个类应当设计成不变;

 

    4.在对其他类的引用上,一个对象对其它对象的引用应当降到最低;

 

    5.尽量降低类的访问权限;

 

    6.谨慎使用序列化功能;

 

    7.不要暴露类成员,而应该提供相应的访问器(属性)     

 

  UML统一建模语言,java中七种设计原则

 

  UML统一建模语言。 

 

  类与类,类和接口,接口和接口之间的关系。 

 

  1、实现关系(一个类实现一个接口) 

 

  2、泛化关系(一个类继承另一个类) 

 

  3、关联(1)、依赖关系:一个类是另一个类的方法局部变量,方法的参数或方法返回值。2)、聚合关系:一个类是另一个类的属性,是整体和部分的关系。3)、组合关系:一个类是另一个类的属性,是整体不可分割的一部分,是强聚合。) 

 

  4、单一职责:一个类而言,应该仅有一个引起它变化的原因,永远不要让一个类存在多个改变的理。一个类只应该做和一个任务相关的业务,不应该把过多的业务放在一个类中完成。 

 

迪米特法则: 

 

一个软件实体应当尽可能少的与其他实体发生相互作用。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CNN——VGG

1.VGG简介 论文下载地址:https://arxiv.org/pdf/1409.1556.pdf VGGNet 是由牛津大学视觉几何小组(Visual Geometry Group, VGG)提出的一种深层卷积网络结构,他们以 7.32% 的错误率赢得了 2014 年 ILSVRC 分类任务的亚军&#xff…

2024年MySQL学习指南(二),探索MySQL数据库,掌握未来数据管理趋势

文章目录 前言4. DDL- 操作数据库4.1 查询4.2 创建数据库4.3 删除数据库4.4 使用数据库 5. DDL- 操作数据表5.1 数据类型5.2 查询表5.3 创建表5.4 删除表5.5 修改表 6. 实战案例详解 前言 接上一篇文章【2024年MySQL学习指南(一)】 4. DDL- 操作数据库 …

2023-2024 年广东省职业院校技能大赛高职组 “软件测试”赛项竞赛规程

2023-2024 年广东省职业院校技能大赛(高职组) “软件测试”赛项竞赛规程 一、赛项信息 赛项名称:软件测试 赛项编号:GZ034 赛项组别:高职组 二、竞赛目标 软件是新一代信息技术的灵魂,是数字经济发展的基础…

LeetCode 每日一题 Day 32 ||递归单调栈

2487. 从链表中移除节点 给你一个链表的头节点 head 。 移除每个右侧有一个更大数值的节点。 返回修改后链表的头节点 head 。 示例 1: 输入:head [5,2,13,3,8] 输出:[13,8] 解释:需要移除的节点是 5 ,2 和 3 。…

大数据 - Doris系列《二》- Doris安装(亲测成功版)

目录 🐶2.1 安装前准备 🥙1.设置系统最大文件打开句柄数 >启动一个程序的时候,打开文件的数量就是句柄数 🥙3.时钟同步 🥙4.关闭交换分区(swap) 🐶2.2 安装FE &#x1f436…

论文悦读(7)——NVM文件系统之Trio(SOSP‘23)文件系统

TRIO(SOSP23) 1. 背景(Background)1.1 NVM Technologis1.2 File System Customization1.3 Userspace NVM File Systems 2. 观察与动机(Observation & Motivation)3. 设计与实现(Design &…

JMeter 插件大全:详细介绍 Jmeter 常用插件

JMeter作为一个开源的接口性能测试工具,其本身的小巧和灵活性给了测试人员很大的帮助,但其本身作为一个开源工具,相比于一些商业工具(比如 LoadRunner),在功能的全面性上就稍显不足。这篇博客,就…

傅里叶级数、傅里叶变换、小波变换、离散余弦变换的理解

目录 1. 傅里叶级数2.傅里叶变换 1. 傅里叶级数 功能:能把任意周期性函数展开成一系列正弦、余弦函数的和。 公式: f ( x ) a 0 2 ∑ n 1 ∞ ( a n cos ⁡ ( 2 π n x T ) b n sin ⁡ ( 2 π n x T ) ) 傅里叶系数 a n 2 T ∫ x 0 x 0 T f ( x )…

网络安全|2024年需要重点关注的10种DNS攻击类型

目前,针对域名系统(DNS)的攻击已经成为企业组织数字化发展中的一个严重问题,每年都有数千个网站成为此类攻击的受害者。据最近的研究数据显示,2023年企业组织与DNS攻击相关的损失同比增加了49%,这些损失不仅…

即时设计:一键查看设计稿与页面差异,让设计师的工作更便捷高效

设计稿走查 在设计工作中,对设计稿和实际页面进行对比是必不可少的环节。然而,传统的对比方式往往耗时耗力,无法精确测量差异。为了解决这个问题,我们推出了一款强大的工具,它可以通过图片对比,轻松查看设…

使用results.csv文件数据绘制mAP对比图

yolov5每次train完成(如果没有中途退出)都会在run目录下生成expX目录(X代表生成结果次数 第一次训练完成生成exp0 第二次生成exp1…以此类推)。expX目录下会保存训练生成的weights以及result.txt文件,其中weights是训练…

Redis第3讲——跳跃表详解

一、什么是跳跃表 跳跃表(skiplist)是一种随机化的数据结构,由William Pugh在论文《Skip lists: a probabilistic alternative to balanced trees》中提出。它通过在每个节点中维持多个指向其它节点的指针,从而达到快速访问节点的…

Zabbix 监控介绍

1、功能概述 通常所说的监控,会模糊地包含以上下个细分领域的内容: 应用性能监控(Application Performance Monitoring)业务交易监控(Business Transaction Monitoring)网络性能监控(Network …

华为云CES监控与飞书通知

华为云负载均衡连接数监控与飞书通知 在云服务的日常运维中,持续监控资源状态是保障系统稳定性的关键步骤之一。本文通过一个实际案例展示了如何使用华为云的Go SDK获取负载均衡器的连接数,并通过飞书Webhook发送通知到团队群组,以便运维人员…

福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!

千里之行,始于足下,若想提高软件编程能力,最最重要的是实践,所谓纸上得来终觉浅,绝知此事要躬行。根据相关【艾宾浩斯遗忘曲线】研究表明,如果不动手实践,记住的东西会很快忘记。 为了便于大家查…

C#设计模式之观察者模式

前言 观察者(Observer)模式也称发布-订阅(Publish-Subscribe)模式,定义了对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 观察者模式的图解如下所示…

小程序测试和APP测试的区别

今天看了一下关于如何测试小程序的教学视频,里面讨论了一个很经典的面试题:小程序测试和APP测试的区别,包括在之前的面试过程中也确实是遇到过这个问题,所以这次打算把它记录下来,也算是知识巩固了。 首先从测试的内容…

android7以上 代码安装APK

一、所需权限 <!--请求安装APK的权限--> <uses-permission android:name"android.permission.REQUEST_INSTALL_PACKAGES" /> <!--写如外部存储的权限--> <uses-permission android:name"android.permission.WRITE_EXTERNAL_STORAGE"…

【DevOps-03】Build阶段-Maven安装配置

一、简要说明 下载安装JDK8下载安装Maven二、复制准备一台虚拟机 1、VM虚拟复制克隆一台机器 2、启动刚克隆的虚拟机,修改IP地址 刚刚克隆的虚拟机 ,IP地址和原虚拟的IP地址是一样的,需要修改克隆后的虚拟机IP地址,以免IP地址冲突。 # 编辑修改IP地址 $ vi /etc/sysconfig…

内存管理的概念-第四十一天

目录 前言 内存空间的分配与回收 内存空间的扩展 地址转换 存储保护 上下限寄存器 重定位寄存器和界地址寄存器 本节思维导图 前言 操作系统作为系统资源的管理者&#xff0c;当然也需要对内存进行管理&#xff0c;要管理什么呢&#xff1f; 操作系统复杂内存空间的分…