接口隔离原则_设计模式的三大分类及六大原则

39b6a16f166c348d6f379044b002452c.png       

        设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

设计模式分为三大类:

  • 创建型模式:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式(5种)

  • 结构型模式:适配器模式、装饰者模式、代理模式、外观模式、桥接模式、组合模式、享元模式。(7种)

  • 行为型模式:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。(11种)

设计模式的六大原则:

1.单一原则(Single Responsibility Principle)

        一个类或者一个方法只负责一项职责,尽量做到类的只有一个行为原因引起变化;

     如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏

2.里氏替换原则(LSP liskov substitution principle)

       子类可以扩展父类的功能,但不能改变原有父类的功能;(类似于多态)

  实际项目中,每个子类对应不同的业务含义,使父类作为参数,传递不同的子类完成不同的业务逻辑。

3.依赖倒置原则(dependence inversion principle)

        高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象,其核心思想是:要面向接口编程,不要面向实现编程。

4.接口隔离(interface segregation principle)

        建立单一接口;(扩展为类也是一种接口,一切皆接口)

        定义:a.客户端不应该依赖它不需要的接口;

           b.类之间依赖关系应该建立在最小的接口上;

        简单理解:复杂的接口,根据业务拆分成多个简单接口; 

5.迪米特原则(law of demeter LOD)

        最少知道原则,尽量降低类与类之间的耦合;

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

6.开闭原则(open closed principle)

        一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展

单一职责原则告诉我们实现类要职责单一

里氏替换原则告诉我们不要破坏继承体系

依赖倒置原则告诉我们要面向接口编程

接口隔离原则告诉我们在设计接口的时候要精简单一

迪米特原则告诉我们要降低耦合

开闭原则是总纲,告诉我们要对扩展开放,对修改关闭

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

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

相关文章

Leetcode 24. 两两交换链表中的节点

原题链接 题解: 1.头部会改变创建虚拟头结点 2.前两个点定义为a,b,c 3.p指向b,a指向c,b指向a ; p指向本段最后一个结点。 class Solution { public:ListNode* swapPairs(ListNode* head) {auto dummy new ListNode(-1);dummy->next head;for (a…

spring aop不执行_使用Spring AOP重试方法执行

spring aop不执行我的一位博客关注者发送了一封电子邮件,要求我显示“ Spring AOP的RealWorld用法”示例。 他提到,在大多数示例中,都演示了Spring AOP在日志记录方法进入/退出或事务管理或安全性检查中的用法。 他想知道Spring AOP在“针对…

LeetCode 09. 回文数

原题链接 class Solution { public:bool isPalindrome(int x) {if(x<0)return false;if(x>0 && x<10)return true;long long temp 0;int xx x;while(x!0){int n x % 10;temp temp * 10 n;x /10;}if(temp xx)return true;else{return false;}} };

python 获取文件名_真实需求 | Python+os+openpyxl 批量获取Excel的文件名和最大行数...

1. 提出需求 这已经不知道是粉丝问我的第几个办公自动化的问题了&#xff0c;并且这些问题都是大家在学习和工作中碰到过的真实问题场景。其实从下图中已经可以很明确的看出别人的需求了&#xff0c;我这里就不用在赘述了&#xff0c;下面直接上思路吧&#xff01;2. 解题思路为…

LeetCode 03. 无重复字符的最长子串

原题链接 解题思路: (双指针扫描) O(n)&#xff0c;双指针主要作用是维护一段区间 定义两个指针 i,j(i<j)&#xff0c;表示当前扫描到的子串是 [i,j] (闭区间)。扫描过程中维护一个哈希表unordered_map<char,int> hash&#xff0c;表示 [i,j]中每个字符出现的次数。…

python元组取值_Python基础之元组

元组初识元组的认识首先&#xff0c;我们来认识一下元组&#xff1a;# 定义一个元组uesr_tuple ("zhangsan", "lisi", "wangwu")# 定义一个空元组empty_tuple ()元组的作用和定义通过前面的学习&#xff0c;我们知道&#xff0c;列表通常用来存…

junit5和junit4_JUnit 5 –下一代JUnit的初步了解

junit5和junit42月初&#xff0c; JUnit 5&#xff08;又名JUnit Lambda&#xff09;团队发布了一个alpha版本。 由于JUnit 4是我工具箱中使用最多的项目之一&#xff0c;因此我认为值得一看下一个主要版本。 我试用了最新版本&#xff0c;并记下了我在这里发现值得注意的更改…

python进阶装饰器_老生常谈Python进阶之装饰器

函数也是对象要理解Python装饰器&#xff0c;首先要明白在Python中&#xff0c;函数也是一种对象&#xff0c;因此可以把定义函数时的函数名看作是函数对象的一个引用。既然是引用&#xff0c;因此可以将函数赋值给一个变量&#xff0c;也可以把函数作为一个参数传递或返回。同…

LeetCode 02.两数相加

原题链接 解题思路&#xff1a; 本题可以使用模拟法&#xff0c;从链表的结点中提取出val逐个相加&#xff0c;没有值取0。并且记录进位&#xff0c;每个节点只保留个位数&#xff0c;所以需要使用sum与10取模&#xff0c;如果最高位存在进位则需要在最后添加一个val为1的节点…

apache ignite_从In Memory Data Grid,Apache Ignite快速入门

apache igniteIMDG或内存数据网格不是内存中关系数据库&#xff0c;NOSQL数据库或关系数据库。 它是另一种软件数据存储库。 数据模型分布在单个位置或多个位置的许多服务器上。 这种分布称为数据结构。 这种分布式模型被称为“无共享”架构。 IMDG具有以下特征&#xff1a; 所…

bvp解算器是什么_那些学习了编程的中学生,为什么会更可能成功?

来源 | 异步当你看到这个题目&#xff0c;或许会想&#xff0c;这不是搞笑吗&#xff1f;众所周知&#xff0c;高等数学是编程的基础和前提&#xff0c;而说起程序编写员&#xff0c;在普通人眼里就是数学学霸的代名词&#xff0c;人们往往会把它和那些数学天才的名字联系在一起…

Leetcode 08. 字符串转换整数 (atoi)

原题链接 1.字符 0~~~~~9 分别对应整数 48~~~~~57 2.先过滤空白 3.确定前面所带的符号 4. long long res 0; res res * 10 str[k] - 0; 可以通过此方法从左到右高位逐个累加。 class Solution { public:int myAtoi(string str) {long long res 0;int k 0;while…

maven与spring_与Spring和Maven签约首个SOAP服务

maven与spring1.简介 在本教程中&#xff0c;我们将学习使用JAX-WS&#xff0c;Spring和Maven实施合同优先的SOAP服务应用程序。 这是使用合同优先还是代码优先方法的更多设计决定。 在开发基于SOAP的Web服务应用程序时使用应用合同优先的方法最显着的好处是&#xff0c;可以在…

如何维持手机电池寿命_充电小知识:你知道如何正确充电吗?这几种充电方式最损害电池...

目前基本上大部分人都至少有一部智能手机&#xff0c;智能手机基本上都需要每日一充&#xff0c;你的充电方式会不会损伤电池呢&#xff1f;有部分消费者认为要等到手机电量耗尽后再充电&#xff0c;还有人认为手机充电要充至100%才能拔下来&#xff0c;有人觉得充电宝等产品给…

【开放集检测】OpenGAN: Open-Set Recognition via Open Data Generation 论文阅读

文章目录 英语积累为什么使用GAN系列网络进行开放集检测摘要1. 前言2. 相关工作开集检测基于GAN网络的开集检测基于暴露异常数据的开集检测 3. OpenGAN3.1 公式建模3.1.1 二分类方法存在问题如何解决 3.1.2 使用合成数据存在问题如何解决 3.1.3 OpenGAN3.1.4 模型验证 3.2 先前…

LeetCode 27.移除元素

原题链接 /** lc appleetcode.cn id27 langcpp** [27] 移除元素标签&#xff1a;拷贝覆盖主要思路是遍历数组nums&#xff0c;每次取出的数字变量为num&#xff0c;同时设置一个下标ans在遍历过程中如果出现数字与需要移除的值不相同时&#xff0c;则进行拷贝覆盖nums[ans] n…

hotspot 默认 gc_默认HotSpot最大直接内存大小

hotspot 默认 gc在我以前的博客文章热点选项中的Java 8改进的文档 &#xff0c;我写的误解围绕热点JVM非标准的默认设置选项 -XX:MaxDirectMemorySize 。 在本文中&#xff0c;我介绍了一种确定HotSpot JVM中“默认”最大直接内存大小的简单方法。 Java启动器的Java 8文档对-X…

python控制电脑休眠唤醒键_每当计算机从休眠状态唤醒时,都运行python脚本

我在python上编写了一个小脚本,该脚本从控制台调用命令行以使linux机器休眠(或在更改一个单词的情况下将其自身关闭),然后在一段时间后唤醒.通过watch命令一次又一次地调用该命令.import osimport timeos.system("watch -n 20 sudo rtcwake -u -s 10 -m mem")因此,在…

sso集成shiro_Keycloak SSO集成到jBPM和Drools Workbench中

sso集成shiro介绍 单一登录&#xff08;SSO&#xff09;和相关令牌交换机制正在成为Web上不同环境中身份验证和授权的最常见方案&#xff0c;尤其是在迁移到云中时。 本文讨论了Keycloak与jBPM或Drools应用程序的集成&#xff0c;以便使用Keycloak上提供的所有功能。 Keycloak…

LeetCode 01. 两数之和

原题 分析&#xff1a; 1.根据题意&#xff0c;首先需要将要数据选择一个合适的 数据结构模型。 因为是对应相关联&#xff0c;所以我们选择unordered_map 2.因为是一组数&#xff0c;所以用数组 &#xff0c;将数值与数组下标对应起来 3.已知两数之和&#xff0c;从数组第…