设计模式 七大原则

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.hqwc.cn/news/321564.html

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

相关文章

【TC3xx芯片】TC3xx芯片的GTM模块详解

目录 前言 正文 1.GTM模块功能概述 1.1 GTM具体功能 1.2 GTM架构 2. GTM模块输入时钟 2.1.fGTM的值怎么计算 3. CMU 3.1 CMU功能 3.2 CMU时钟的计算 3..2.1 CLS0_CLK怎么计算 3.2.1 GTM Global Clock时钟计算 3.2.2 分频时钟的计算 4. CCM 4.1 CCM功能 4.2 CCM…

Mysql的四大引擎,账号管理,数据库的建立

数据库存储引擎查看 Support字段说明 default的为默认引擎 YES表示可以使用 NO表示不能使用 命令 SHOW ENGINES 四大引擎 MEMORY 使用场景:由于易失性,可以用于存储在分析中产生的中间表 特点 所有的数据都保存在内存中,一旦服务器重启&…

Spark内核解析-内存管理7(六)

1、Spark内存管理 Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色。理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优。本文中阐述的原理基于 Spark 2.1 版本。 在执行 Spark 的…

ArrayList集合综合练习

文章目录 题目1训练目标训练提示训练步骤参考答案 题目2训练目标训练提示参考方案训练步骤参考答案 题目3训练目标训练提示参考方案训练步骤参考答案 题目4(综合)训练目标训练提示参考方案训练步骤参考答案 题目1 现有如下字符串元素:[“aaa…

Mysql的基本用法(上)非常详细、快速上手

上篇结束了java基础,本篇主要对Mysql中的一些常用的方法进行了总结,主要对查询方法进行了讲解,包括重要的多表查询用到的内连接和外连接等,以下代码可以直接复制到可视化软件中,方便阅读以及练习; SELECT *…

Microsoft Word去除页面多余的换行符

大家写论文的时候或者排版的时候可能遇到换行符多出来了导致页面的不美观。像下面这张图一样,虽然latex不会出现这种问题。 处理方式 点击插入然后点击分页 结果展示

普通用户用哪款电脑杀毒软件最好?

前言 各位小伙伴接触到电脑的时候,都一定有听过“电脑一定要安装杀毒软件”这句话。 毕竟在电脑诞生之初到今天,电脑木马和病毒依旧存在。 中了木马或病毒的电脑会出现什么现象?具体得看中了什么样的病毒。 但轻则资料泄漏、电脑瘫痪&…

React Admin 前端脚手架之ant-design-pro

文章目录 一、React Admin 前端脚手架选型二、React Admin 前端脚手架之ant-design-pro三、ant-design-pro使用步骤四、常用总结(持续更新)EditableProTable组件 常用组件EditableProTable组件 编辑某行后,保存时候触发发送请求EditableProTa…

图片上传下载

数据模型: imageUrl: , <el-form-item label"楼盘图片:" prop"pic" class"uploadImg" v-model"emp.pic"> <el-upload class"avatar-uploader" …

Nginx 的SSL证书配置

目录 1.申请域名&#xff0c;证书下载 2.准备站点源代码 3.修改nginx 对应网站的配置文件 4.修改 host 文件 http协议访问的网站默认会显示不安全&#xff0c;因为数据默认是明文传输的 https是httpssl&#xff0c;ssl是加密协议&#xff0c;通过证书来进行加密的&#xff…

柯桥小语种学习,留学韩语 生活日常口语 语法

① N이다/A/V/았ㄹ/을지도 모르다 说不定 이미 도착했을 지도 모르니까 전화해 봐요 说不定已经到了&#xff0c;打电话试试 주말에 세일이 있을지도 모르니까 주말에 가 보자 周末说不定会搞活动&#xff0c;我们周末去吧 ② ㄴ/은/는/았었는/ㄹ/을지 모르다 不知道 처음이…

轻量检测模型PP-PicoDet解析

Paper&#xff1a;PP-PicoDet: A Better Real-Time Object Detector on Mobile Devices official implementation&#xff1a;https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.7/configs/picodet Backbone 作者通过实验发现&#xff0c;ShuffleNetV2在移动…