设计模式汇总

2023-09-14 15:01:46

设计模式本质上是某类特定问题的代码设计解决方案,实际上是一套某类问题的代码设计经验总结。(前辈总结的解决某类问题的切实可行的套路)

问题 1、为什么要使用设计模式?

答:1、 提高代码复用率,降低开发成本和成周期。 2、提高代码可维护性,可扩展性。3、使代码更优雅,更容易被他人理解。

问题 2、设计模式的设计原则是什么?

答:

1、单一职责原则  ; 一个类只有一个引起它变化的原因,如果一个类承担的职责过多,即耦合性太高,一个职责的变化可能会影响到其他的职责。

2、开放封闭原则 ; 一个实体(类,函数、模块)应该对外扩展开放,对内修改封闭。 

  • 每次发生变化的时,要通过添加新的代码来增强现有类型的行为,而不是修改原有的代码。

  • 符合开封封闭原则的最好方式是提供一个固有的接口,然后让所有有可能发生变化的类实现该接口,让固定的接口与相关对象进行交互。

3、里氏替换原则 ; 子类必须替换掉它们的父类型。

  • 在软件开发过程中,子类替换父类后,程序的行为是一样的。

  • 只有子类替换掉父类后软件的功能不受影响,父类才能真正的被复用,而子类也可以在父类的基础上添加新的行为。

5、依赖倒置原则; 细节应该依赖于抽象,而抽象不应该依赖于细节;

  • 所谓的面向接口编程,而不是面向实现编程,这样可以降低客户于具体实现的耦合

6、合成复用原则;在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分。

  • 新对象通过向这些对象的委派达到复用已用功能的目的,简单的说,就是要尽量使用合成/聚合,尽量不要使用继承

7、迪米特法则 又称最少知识原则,一个模块或对象应尽量少的和其他模块发生相互作用,使系统的功能模块相对独立。这样当一个模块发生变化,影响的模块越少,扩展起来更容易。

  • 关于迪米特法则通俗的解释 :不要跟陌生人说话

  • 迪米特法则的应用,外观模式,中介模式

问题3 设计模式有哪些类型?

设计模式的类型总共分为:三大类,23中具体的设计模式

更多推荐

【Hash表】找出出现一次的数字-力扣 136

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:kuan的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结java核心技术点,如集合,jvm,并发编程redis,kaf

蓝蓝设计为教育行业提供软件UI交互设计服务

在教育行业,软件的用户体验设计对于提供优质教育体验至关重要。教育行业软件用户体验设计需要考虑到学生和教师的需求,以及教育环境的特殊性。为了确保设计的成功,选择一家专业的设计公司是至关重要的,而北京蓝蓝设计公司就是您的最佳选择。北京蓝蓝设计公司是一家在教育行业软件用户体验设计领域拥有丰富经验的专业团队。我们深知教育行业软

elasticsearch索引同步

通常项目中使用elasticsearch需要完成索引同步,索引同步的方法很多:#1、针对实时性非常高的场景需要满足数据的及时同步,可以同步调用,或使用Canal去实现。1)同步调用即在向MySQL写数据后远程调用搜索服务的接口写入索引,此方法简单但是耦合代码太高。2)可以使用一个中间的软件canal解决耦合性的问题,但

Stable DIffusion 炫酷应用 | AI嵌入艺术字+光影光效

目录1生成AI艺术字基本流程1.1生成黑白图1.2启用ControlNet参数设置1.3选择大模型写提示词2不同效果组合2.1更改提示词2.2更改ControlNet2.2.1更改模型或者预处理器2.2.2更改参数3.其他应用3.1AI光影字本节需要用到ControlNet,可以查看之前博文StableDiffusio

【Qt】Qt中的中心部件意义

setCentralWidget()是QWidget类的一个成员函数,用于设置窗口的中心部件。中心部件是窗口中占据主要区域的部件,通常是用来显示应用程序的主要内容。以下是setCentralWidget()函数的用法示例:QWidget*centralWidget=newQWidget(this);setCentral

【面试题】forEach能跳出循环吗?

前端面试题库(面试必备)推荐:★★★★★地址:前端面试题库【国庆头像】-国庆爱国程序员头像!总有一款适合你!如果面试官,或者有人问你foreach怎么跳出循环,请你大声的告诉ta,跳不出!!!!!!!!!!foreach跳不出循环为什么呢?先看看foreach大体实现。Array.prototype.customFor

Zabbix介绍与安装

目录一、概述二、zabbix的主要功能三、zabbix监控原理四、Zabbix监控模式五、zabbix的架构server-clientserver-proxy-clientmaster-node-client六、zabbix的安装安装zabbix服务端安装zabbix客户端测试zabbix1、在Web页面中添加agen

Windows脚本导入导出Mongodb数据库文件实现备份与恢复

导出指定时间范围的数据@echooffsetlocalrem提前将MongoDB安装的bin路径加到系统环境变量PATH里面,方便直接运行mongodump命令ifnotexistD:\MongoDB_backupgotocreategotostart:createrem如果没有创建导出文件目录,那么在此步骤创建mdD

链式法则:概率论描述语言模型

目录1.事件相互独立2.链式法则3.示例4.语言模型中的链式法则1.事件相互独立事件相互独立就是:一个事件的发生与否,不会影响另外一个事件的发生。当a和b两个事件互相独立时,有:P(a|b)=P(a)推广到3个事件就有下面这个公式:P(a|b,c)=P(a|c)其中:P(a|b,c)表示在b和c事件都发生的情况下,a事

特征融合篇 | YOLOv8 引入中心化特征金字塔 EVC 模块 | 《Centralized Feature Pyramid for Object Detection》

论文地址:https://arxiv.org/pdf/2210.02093.pdf代码地址:https://github.com/QY1994-0919/CFPNet视觉特征金字塔在广泛的应用中展示了其在效果和效率上的优越性。然而,现有的方法过于关注层间特征之间的交互,而忽视了层内特征的调节,而这些调节在经验上被证明是

springboot配置注入增强(二)属性注入的原理

一原理1配置的存储springboot在启动的时候会后构建一个org.springframework.core.env.Environment类型的对象,这个对象就是用于存储配置,如图springboot会在启动的最开始创建一个Environment对象这个webApplicationType的枚举是在newSprin

热文推荐