1.每日设计模式-理论

目录

一、什么是设计模式

二、设计原则

三、设计模式的种类


代码地址:patterns: 每日设计模式

一、什么是设计模式

软件设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。

一句大白话可以总结:在一定环境下,用固定套路解决问题。

二、设计原则

对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性是一个至关重要的问题,如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。在面向对象设计中,可维护性的复用是以设计原则为基础的。每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提升一个软件结构的设计水平。

面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中,它们是从许多设计方案中总结出的指导性原则。面向对象设计原则也是我们用于评价一个设计模式的使用效果的重要指标之一。

原则的目的: 高内聚,低耦合

名称定义
单一职责原则类的职责单一,对外只提供一种功能,而引起类变化的原因都应该只有一个。
(Single Responsibility Principle, SRP)
★★★★☆
开闭原则类的改动是通过增加代码进行的,而不是修改源代码。
(Open-Closed Principle, OCP)
★★★★★
里氏代换原则任何抽象类(interface接口)出现的地方都可以用他的实现类进行替换,实际就是虚拟机制,语言级别实现面向对象功能。
(Liskov Substitution Principle, LSP
★★★★★
依赖倒转原则依赖于抽象(接口),不要依赖具体的实现(类),也就是针对接口编程。
(Dependence Inversion Principle, DIP)
★★★★★
接口隔离原则不应该强迫用户的程序依赖他们不需要的接口方法。一个接口应该只提供一种对外功能,不应该把所有操作都封装到一个接口中去。
(Interface Segregation Principle, ISP
★★☆☆☆
合成复用原则如果使用继承,会导致父类的任何变换都可能影响到子类的行为。如果使用对象组合,就降低了这种依赖关系。对于继承和组合,优先使用组合。
(Composite Reuse Principle, CRP)
★★★★☆
迪米特法则一个对象应当对其他对象尽可能少的了解,从而降低各个对象之间的耦合,提高系统的可维护性。例如在一个程序中,各个模块之间相互调用时,通常会提供一个统一的接口来实现。这样其他模块不需要了解另外一个模块的内部实现细节,这样当一个模块内部的实现发生改变时,不会影响其他模块的使用。(黑盒原理)
(Law of Demeter, LoD
★★★☆☆

三、设计模式的种类

  1. 创建型(Creational)模式:如何创建对象;
  2. 结构型(Structural )模式:如何实现类或对象的组合;
  3. 行为型(Behavioral)模式:类或对象怎样交互以及怎样分配职责。

有一个“简单工厂模式”不属于GoF 23种设计模式,但大部分的设计模式书籍都会对它进行专门的介绍。

模式名称模式名称作用
创建型模式 Creational Pattern单例模式是保证一个类仅有一个实例,并提供一个访问它的全局访问点。
-6★★★★☆
简单工厂模式通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
★★★☆☆
工厂方法模式定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。
★★★★★
抽象工厂模式提供一个创建一系列相关或者相互依赖的接口,而无需指定它们具体的类。
★★★★★
原型模式用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
★★★☆☆
建造者模式将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
★★☆☆☆
结构型模式适配器模式将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
Structural Pattern★★★★☆
-7桥接模式将抽象部分与实际部分分离,使它们都可以独立的变化。
★★★☆☆
组合模式将对象组合成树形结构以表示“部分--整体”的层次结构。使得用户对单个对象和组合对象的使用具有一致性。
★★☆☆☆
装饰模式动态的给一个对象添加一些额外的职责。就增加功能来说,此模式比生成子类更为灵活。
★★★☆☆
外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
★★★★★
享元模式以共享的方式高效的支持大量的细粒度的对象。
★☆☆☆☆
代理模式为其他对象提供一种代理以控制对这个对象的访问。
★★★★☆
行为型模式职责链模式在该模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。
Behavioral Pattern★★☆☆☆
-11命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户端进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
★★★★☆
解释器模式如何为简单的语言定义一个语法,如何在该语言中表示一个句子,以及如何解释这些句子。
★☆☆☆☆
迭代器模式提供了一种方法顺序来访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。
★☆☆☆☆
中介者模式定义一个中介对象来封装系列对象之间的交互。终结者使各个对象不需要显示的相互调用 ,从而使其耦合性松散,而且可以独立的改变他们之间的交互。
★★☆☆☆
备忘录模式是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
★★☆☆☆
观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
★★★★★
状态模式对象的行为,依赖于它所处的状态。
★★☆☆☆
策略模式准备一组算法,并将每一个算法封装起来,使得它们可以互换。
★★★★☆
模板方法模式得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
★★★☆☆
访问者模式表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
★☆☆☆☆

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

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

相关文章

AI大模型的口语练习APP

开发一个使用第三方大模型的口语练习APP涉及多个步骤,从需求分析到部署上线。以下是详细的开发流程和关键步骤,通过系统化的流程和合适的技术选型,可以有效地开发出一个功能丰富、用户体验良好的口语练习APP。北京木奇移动技术有限公司&#…

网络初识 二

一、TCP/IP五层协议 -> 应用层 : 传输的数据在应用程序中如何使用 -> 传输层 : 关注的是通信的起点终点 -> 网络层 : 关注的是通信中的路线规划 -> 数据链路层 : 关注的是相邻节点之间的通信细节 -> 物理层 : 网络通信的基础设施 说是五层,实际上下面…

Qt案例练习(有源码)

项目源码和资源:Qt案例练习: qt各种小案例练习,有完整资源和完整代码 1.案例1 项目需求:中间为文本框,当点击上面的复选框和单选按钮时,文本框内的文本会进行相应的变化。 代码如下: #include "dialog.h" …

C++的数据结构(十):AVL树

AVL树是一种自平衡的二叉搜索树,得名于其发明者G.M. Adelson-Velsky和E.M. Landis。在AVL树中,任何节点的两个子树的高度最多相差1,这种性质确保了AVL树的查找、插入和删除操作的时间复杂度接近O(log n)。 AVL树是一种二叉搜索树,…

MongoDB基础入门到深入(七)建模、调优

文章目录 系列文章索引十一、MongoDB开发规范十二、MongoDB调优1、三大导致MongoDB性能不佳的原因2、影响MongoDB性能的因素3、MongoDB性能监控工具(1)mongostat(2)mongotop(3)Profiler模块(4&a…

K8S认证|CKA题库+答案| 16. 升级集群

16、升级集群 CKA v1.29.0模拟系统免费下载试用: 百度网盘:https://pan.baidu.com/s/1vVR_AK6MVK2Jrz0n0R2GoQ?pwdwbki 题目: 您必须在以下Cluster/Node上完成此考题: Cluster Ma…

CTF网络安全大赛简单web题目:eval

题目来源于&#xff1a;bugku 题目难度&#xff1a;简单 一道简单web的题目 题目源代码&#xff1a; <?phpinclude "flag.php";$a $_REQUEST[hello];eval( "var_dump($a);");show_source(__FILE__); ?> 这个PHP脚本有几个关键部分&#xff0c;但…

太阳诱电:顺应时代需求的新型电容器为何能在全球得到广泛应用(下)

随着汽车电动化和电子控制化的进展&#xff0c;车载计算机和电气部件也在逐渐向大功率化的方向发展。而构成这些车载设备电源电路的电子元器件也必须随之进行技术革新。太阳诱电集团携手全资子公司ELNA&#xff0c;开发并供应新型电容器“导电性高分子混合铝电解电容器”&#…

【热门话题】一文带你读懂公司是如何知道张三在脉脉上发了“一句话”的

按理说呢&#xff0c;A公司和脉脉属于不同的平台&#xff0c;而且脉脉上大家可以匿名发言&#xff0c;所以&#xff0c;即便我坐在你边上&#xff0c;我发了一句话上去&#xff0c;你也不知道是谁发的。但通过一些技术&#xff0c;我们却可以分析出&#xff0c;公司是如何知道张…

IOC控制反转

IOC IOC&#xff0c;全称为Inversion of Control(控制反转)&#xff0c;是一种设计原则&#xff0c;它反转了传统编程中的控制流程。在传统的编程模式中&#xff0c;组件之间的依赖关系是由组件自身在内部创建和维护的。而在控制反转模式中&#xff0c;这种依赖关系由外部容器(…

SSH 免密登录vscode 附debug 免密登录失败问题排查

SSH 免密登录vscode 附debug 关键词 &#xff1a;vscode ssh ssh无法免密登录 ssh免密登录失败 1 sshd 的配置文件/etc/ssh/sshd_config&#xff0c; 确保公钥登录开启 PubkeyAuthentication yes2 生成公钥并上传 ssh-keygen找到本地 .ssh/id_rsa.pub 将其中文本内容搞到…

PS —— 制作证件照

PS —— 制作证件照 裁剪工具魔棒工具油漆桶工具扩展画布 老是看编程&#xff0c;会有些疲劳&#xff0c;这个专栏我会放一些其他的知识&#xff0c;我们今天利用PS制作证件照&#xff08;注意&#xff0c;这里一些ps的基础操作我不会很展开的去讲&#xff09;&#xff1a; 裁…

Redisson分布式Redis锁,tryLock方法详解

在 Java 中&#xff0c;RLock 是 Redisson 库中提供的一个分布式锁接口&#xff0c;用于实现基于 Redis 的分布式锁。RLock 的 tryLock 方法用于尝试获取锁&#xff0c;并在特定的时间内等待获取锁。 方法签名如下&#xff1a; boolean tryLock(long waitTime, long leaseTim…

WPF关键组件代码示例

通过一个综合示例代码&#xff0c;展示WPF的关键组件&#xff0c;包括XAML、控件、数据绑定、样式和模板以及动画。这个示例创建一个简单的WPF应用程序&#xff0c;包含一个文本框、按钮和列表框&#xff0c;实现数据绑定、自定义样式和模板&#xff0c;以及按钮点击后的动画效…

深入解析R语言的贝叶斯网络模型:构建、优化与预测;INLA下的贝叶斯回归;现代贝叶斯统计学方法;R语言混合效应(多水平/层次/嵌套)

目录 ①基于R语言的贝叶斯网络模型的实践应用 ②R语言贝叶斯方法在生态环境领域中的应用 ③基于R语言贝叶斯进阶:INLA下的贝叶斯回归、生存分析、随机游走、广义可加模型、极端数据的贝叶斯分析 ④基于R语言的现代贝叶斯统计学方法&#xff08;贝叶斯参数估计、贝叶斯回归、…

react使用AntV

AntV使用&#xff08;https://antv.antgroup.com/&#xff09; import React, { useEffect } from "react"; // npm install antv/g2 import { Chart } from "antv/g2"; const Charts () > { function Ccc() { // 准备数据 const data [ { genre: …

【Linux】脚本shell script

shell是与Linux交互的基本工具 shell script是针对shell所写的脚本&#xff0c;解释执行&#xff0c;无需编译 注意事项 指令的执行是从上而下、从左而右的分析与执行&#xff1b; 指令、选项与参数间的多个空白都会被忽略掉&#xff1b; 空白行也将被忽略掉&#xff0c;并且…

抽象工厂模式(AbstractFactoryPattern)

文章目录 1.抽象工厂模式定义2.UML类图3.抽象工厂模式具体实现工厂模式实现单一产品族抽象工厂实现多产品族产品类工厂类使用 4.抽象工厂模式优缺点 1.抽象工厂模式定义 提供一个创建一系列相关或相互依赖对象的接口&#xff0c;而无需指定它们具体的类。 工厂方法模式是单一产…

2024电工杯B题食谱评价与优化模型思路代码论文分析

2024年电工杯数学建模竞赛B题论文和代码已完成&#xff0c;代码为B题全部问题的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立和求解、问题2模型的建立和求解、问题3模型的建立和求解&#xff09;、模型…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-17讲 定时器按键消抖

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…