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

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…

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

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

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

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

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

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

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

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

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

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

【开放集检测】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 先前…

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

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

jbpm 和 drools_jBPM和Drools工作台中的用户和组管理

jbpm 和 drools介绍 本文讨论了一项新功能,该功能允许使用集成在jBPM和Drools Workbenches中的直观友好的用户界面来管理应用程序的用户和组。 用户和组管理 在安装,设置和使用此功能之前,本文讨论了一些以前的概念,需要进一步理…

从事java编程技能要求_5道Java视频课程,提高您的编程技能

从事java编程技能要求作为Web开发人员,跟上技术知识可能会很棘手。 新技术似乎每天都在弹出,而基本技术也看到了重复迭代的浪潮,增加了新的功能。 Java开发人员应该做什么? 这是在线教育平台发挥作用的地方。 它们可以帮助您快速…

sqlserver存储过程加锁后怎么解锁_【缺陷周话】第59期:重复加锁

聚焦源代码安全,网罗国内外最新资讯!*声明:《缺陷周话》栏目系列文章由奇安信代码卫士团队原创出品。未经许可,禁止转载。转载请注明“转自奇安信代码卫士 www.codesafe.cn”。代码审计是使用静态分析发现源代码中安全缺陷的方法&…

idea添加jboss_如何将云持久存储添加到JBoss Cool Store

idea添加jboss我们一直在讨论为什么应用程序开发人员在App Dev Cloud Stack系列中不能再忽略其堆栈了。 带有JBoss Cool Store的App Dev Cloud 上个月,我们带来了一个完整的零售示例,其中的JBoss Cool Store运行在您的堆栈的OpenShift Enterprise层上&…

ssm影城项目_影场与属性访问器界面

ssm影城项目卡尔迪亚(Carl Dea)最近跟踪了我的一篇名为“ 保存内存”的博客文章! 为属性使用阴影字段 。 在他的博客中,他建议使用称为“属性访问器”的接口来消除大量使用样板代码所需的样板代码。 卡尔还提到他尚未用大量数据测…

java流写入数据库_Java 8:在2分钟内将智能流与数据库一起使用

java流写入数据库快速流媒体 当Java 8最终问世时,我和一些大学开始了一个开源项目,以利用Java 8的流库使整个Java / DB问题更进一步,以便将数据库表视为纯Java 8流。 速度诞生了! 哇,现在我们可以做类型安全的数据库应…

小米摄像头有onvif协议_监控摄像头完好但图像不行,肯定逃不过这10个问题

摄像头仅仅是视频监控系统的一部分,即使摄像头完好无损,监控画面也可能会出现不显示、卡顿、丢失等情况。想要彻底解决网络监控的问题,往往需要排查各个连接设备才可以判断。下面我们就总结了10个问题,彻底解决网络监控的问题。一…

java对话_您应该保持联系的十大高级Java对话

java对话在线讲座和视频是学习软件开发新事物的主要资源之一。 您可以找到Java专家与您分享他们的经验,而不必坐下来。 在下面的文章中,我们收集了10位我们最喜欢的演讲者和主题,我们相信每个Java开发人员都应该注意。 获取爆米花&#xff0…

【WebRTC---源码篇】(三)Windows/Linux音视频采集封装模块

视频采集相关类图 DeviceInfo接口提供了设备枚举相关功能。 NumberOfDevices枚举设备个数。 GetDeviceName获取某个设备名称。 GetCapability枚举某个设备所支持的所有能力(VideoCaptureCapability: 分辨率,最大帧率,颜色类型) VideoCaptureModule视频采集模块的基类: …

java设计单词英译汉小助手_拣单词|第八期第3天:第521528个单词宝藏

宝藏坚持每天拣单词积累你的词汇宝藏打好英语学习基本功怎么学?每天预留15分钟,积累你的词汇宝藏!每周一、二、三,发布新单词每周四、五、六,乱序复习单词周日测试(仅限入群的学员)遇到新单词,你可以&#…

spring多个视图解析器_在Spring中配置多个View解析器

spring多个视图解析器1.简介 在Spring中,提供了View Resolver来使用模型中可用的数据来解析视图,而无需与JSP,Velocity或Thymeleaf等View技术紧密绑定。 Spring可以根据需要轻松灵活地配置一个或多个View Resolver 。 2. Spring MVC应用程序…

单选按钮:after_选择的按钮:将ToggleButtons用作单选按钮

单选按钮:after对于MQTT.fx,我想使用ToggleButtons例如选择MQTT消息或QoS级别的解码: 我发现在ToggleGroup的上下文中,ToggleButton在选择/取消选择方面的行为与RadioButtons不同:与RadioButtons不同,ToggleButtons仍…