设计模式 七大原则

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.mfbz.cn/a/292989.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python处理音频

从video中抽取audio from moviepy.editor import VideoFileClip from pydub import AudioSegmentvideo_path /opt/audio/audios/video1.mp4 audio_path /opt/audio/audios/video1.wav # 提取的音频保存路径# 加载视频文件 video VideoFileClip(video_path)# 提取音频 audi…

华为DriveONE电机控制器拆解实拍

如果说之前的问界M5、M7,华为让我们看到其在智能化上确实拥有遥遥领先的能力,那么在智界S7上,则让我们看到华为在动力、底盘这些硬件执行层面,竟然也有不输给很多车企的实力。1、华为电驱,全球第一?在智界S…

如何使用Cloudreve+Cpolar搭建个人PHP云盘系统并发布公网可访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了,各互联网大厂也纷纷加入战局&#…

微信小程序:flex常用布局

在我们平时微信小程序开发过程中为了页面能达到设计小伙伴的预期,追求还原度,那我们肯定会使用很多常用的布局方式,那我们今天就介绍一下微信小程序中常用的一些flex布局 1、常用flex布局 /** 水平垂直居中 **/ .flex-center {display: fle…

轻量化网络-MobileNet系列

整理备忘 目录 1. MobileNetV1 1.1 论文 1.2 网络结构 1.3 深度可分离卷积 1.4 计算量下降了 1.5 参数量下降了 2. MobileNetV2 2.1 论文 2.2 网络结构 2.3 效果 3. MobileNetV3 3.1 论文 3.2 网络结构 3.3 效果 1. MobileNetV1 1.1 论文 https://arxiv.org/a…

从0开始python学习-39.requsts库

目录 HTTP协议 1. 请求 2. 响应 Requests库 1. 安装 2. 请求方式 2.1 requests.请求方式(参数) 2.2 requests.request() 2.3 requests.session().request() 2.4 三种方式之间的关联 3. 请求参数 3.1 params:查询字符串参数 3.2 data:Form表单…

出现 No such instance field: ‘XXXX‘ 的解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 作为一个全栈的开发玩家,需要调试前后端的数据传输,方便发现问题所在! 在debug整个项目的时候,检查传输数据的时候,发现前端可以传输,但是后端一直拿不到 出现如下问题:No such instance field: parentModel 截图…

【git使用】了解三种git commit合并的使用场景(rebase、merge、cherry-pick)

参考 【Git学习笔记】逃不掉的merge和rebase-腾讯云开发者社区-腾讯云git merge 和 git rebase - 知乎git cherry-pick 教程 - 阮一峰的网络日志 简单理解各种合并的方法 线性合并,使用 rebase —— feature 分支开发,提交前拉取 master 最新改动进行…

Java Review - MapStruct_使用 Intellij 和 Maven Debug 分析MapStruct实现原理

文章目录 Java动态编译、JSR 269 和 MapStructJSR 269JSR 269的工作原理MapStruct示例 MappingProcessor调试编译期生成的代码 Java动态编译、JSR 269 和 MapStruct Java动态编译是指在运行时动态地将Java源代码编译成字节码并加载到Java虚拟机中执行。 JSR 269 是Java规范请求…

使用Kafka与Spark Streaming进行流数据集成

在当今的大数据时代,实时数据处理和分析已经变得至关重要。为了实现实时数据集成和分析,组合使用Apache Kafka和Apache Spark Streaming是一种常见的做法。本文将深入探讨如何使用Kafka与Spark Streaming进行流数据集成,以及如何构建强大的实…

Java面试题之集合篇

前言 本篇主要总结JAVA面试中关于集合相关的高频面试题。本篇的面试题基于网络整理以及自己的总结编辑。在不断的完善补充哦。欢迎小伙伴们在评论区发表留言哦! 1、基础 1.1、Java 集合框架有哪些? Java 集合框架,大家可以看看 《Java 集…

读算法霸权笔记11_微目标

1. 脸书 1.1. 一份请愿书属于脸书了,而社交网络的算法会对如何最大限度地利用这份请愿书做出判断 1.1.1. 脸书的算法在决定谁能看到我的请愿书时会把所有因素都考虑在内 1.2. 通过改变信息推送的方式,脸书研究了我们…

MATLAB全局最优搜索函数:GlobalSearch函数

摘要:本文介绍了 GlobalSearch 函数的使用句式(一)、三个运行案例(二)、以及 GlobalSearch 函数的参数设置(三、四)。详细介绍如下: 一、函数句法 Syntax gs GlobalSearch gs Glo…

java每日一题——输出星星塔(答案及编程思路)

前言: 打好基础,daydayup! 题目:请编写输出如下图的星星塔 编程思路:1,计算要输入几行;2,计算每行的⭐数量,及空格的数量;计算相应的关系; 如图:假…

【中小型企业网络实战案例 八】配置映射内网服务器和公网多出口、业务测试和保存配置

相关学习文章: 【中小型企业网络实战案例 一】规划、需求和基本配置 【中小型企业网络实战案例 二】配置网络互连互通【中小型企业网络实战案例 三】配置DHCP动态分配地址 【中小型企业网络实战案例 四】配置OSPF动态路由协议【中小型企业网络实战案例 五】配置可…

react+AntDesign 之 pc端项目案例

1.环境搭建以及初始化目录 CRA是一个底层基于webpack快速创建React项目的脚手架工具 # 使用npx创建项目 npx create-react-app react-jike# 进入到项 cd react-jike# 启动项目 npm start2.安装SCSS SASS 是一种预编译的 CSS,支持一些比较高级的语法,…

优化企业运营,深入探索SAP库存管理解决方案

SAP库存管理是SAP提供的一款领先的企业库存管理解决方案。它致力于帮助企业实现对库存的全面掌控,优化供应链管理,降低库存成本,提高客户满意度。这个功能强大的系统为企业提供了丰富的仓储管理功能,如库存盘点、物料追踪、供应商…

C# 使用Microsoft消息队列(MSMQ)

写在前面 Microsoft Message Queuing (MSMQ) 是在多个不同的应用之间实现相互通信的一种异步传输模式,相互通信的应用可以分布于同一台机器上,也可以分布于相连的网络空间中的任一位置。 使用消息队列可以实现异步通讯,无需关心接收端是否在…

CCNP课程实验-06-EIGRP-Trouble-Shooting

目录 实验条件网络拓朴 环境配置开始排错错误1:没有配置IP地址,IP地址宣告有误错误2:R3配置了与R1不同的K值报错了。错误3:R4上的AS号配置错,不是1234错误4:R2上配置的Key-chain的R4上配置的Key-chain不一致…

实时记录和查看Apache 日志

Apache 是一个开源的、广泛使用的、跨平台的 Web 服务器,保护 Apache Web 服务器平台在很大程度上取决于监控其上发生的活动和事件,监视 Apache Web 服务器的最佳方法之一是收集和分析其访问日志文件。 Apache 访问日志提供了有关用户如何与您的网站交互…
最新文章