设计模式 基本认识

文章目录

  • 设计模式的作用
  • 设计模式三原则
  • 设计模式与类图
  • 设计模式的分类

设计模式的作用

设计模式是在软件设计过程中针对常见问题的解决方案的一种通用、可重用的解决方案。设计模式提供了一种经过验证的方法,可以帮助开发人员解决特定类型的问题,并在软件设计中提供一种结构化的方法。

大白话:设计模式是大佬实践得出的代码框架。

设计模式三原则

  1. 单一职责原则(Single Responsibility Principle,SRP):

一个类应该只有一个引起变化的原因,即一个类应该只负责一种职责。
这个原则的核心思想是将一个类的功能划分得更加清晰,避免一个类承担过多的责任。

  1. 开放-封闭原则(Open-Closed Principle,OCP)

软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。
这意味着在不修改现有代码的情况下,可以通过扩展来实现新的功能或变化。

  1. 依赖倒置原则(Dependency Inversion Principle,DIP)
    ①高层模块不应该依赖于低层模块,二者都应该依赖于抽象。
    ②抽象不应该依赖于细节,细节应该依赖于抽象。
    这个原则强调使用接口和抽象类来减少模块之间的直接依赖,从而提高代码的灵活性和可维护性。

对依赖倒置原则的解释:
①:高模块可以理解后定义的具体类,低模块则指后定义的具体类(这里说的具体类指对接口类的实现)抽象指的是含有虚函数的类,常常是接口类。
②: 实现非虚类时要通过接口类确认要实现哪些细节,而不是为了适应细节去调整接口类。

设计模式与类图

  1. 总体认识:
    (网上随便找的一张类图,不用看懂)
    在这里插入图片描述

  2. 单个类的属性描述规则

属性名称:
属性名称通常以小写字母开头,可以使用驼峰命名法或下划线命名法。
属性名称应该能够清晰地描述属性所代表的含义。
如果类为接口类,则类目为斜体

属性类型:
属性类型表示属性的数据类型,可以是基本数据类型(如整数、字符串等)或其他类的类型。
在属性名称后面使用冒号(:)来指定属性的数据类型。

属性可见性:
属性可见性表示属性对外部类的可访问性,通常包括公有属性(+)、私有属性(-)、受保护属性(#)等。
可以使用符号表示属性的可见性,例如“+”表示公有属性,“-”表示私有属性,“#”表示受保护属性,“~”表示包内可见属性等。

属性默认值:
属性默认值表示属性在创建对象时的初始值。
可以使用等号(=)来指定属性的默认值。

属性约束:
属性约束表示属性的取值范围或其他约束条件。
可以在属性描述中添加约束条件,例如使用大括号{}表示取值范围,使用括号()表示其他约束条件。

  1. 类之间的关系描述规则

关联关系(Association):

含义: 关联分为三种:
1.A中有B类对象的访问方式
2.A中有B类对象访问方式,B中有A类对象访问方式
3.A中有其他A类对象的访问方式(链表)

一条直线连接两个类,表示两个类之间存在某种关联关系。
可以在关联线上标注关联的名称或角色。
可以使用箭头表示关联的方向。

聚合关系(Aggregation):

含义:A的成份有B、C、D类对象。但析构时,可以不释放它们。

用带空心菱形的直线连接两个类,表示一种整体与部分的关系。
空心菱形指向整体类,表示整体类包含部分类。
聚合关系中,部分类的生命周期可以独立于整体类。

组合关系(Composition):

含义:A的成份有B、C、D。A离开B、C、D就不存在。B、C、D不一起在A中就没意义。

用带实心菱形的直线连接两个类,表示一种强的整体与部分的关系。
实心菱形指向整体类,表示整体类拥有部分类。
组合关系中,部分类的生命周期依赖于整体类。

继承关系(Inheritance):
用带空心箭头的直线连接两个类,表示子类继承父类的属性和方法。
箭头指向父类,表示子类是父类的特化。
子类可以重写父类的方法或添加新的方法。

接口实现关系(Interface Realization):
带虚线箭头的直线连接类和接口,表示类实现了接口定义的方法。
虚线箭头指向接口,表示类实现了接口定义的方法。

依赖关系(Dependency):
带箭头的虚线连接两个类,表示一个类依赖于另一个类。
依赖关系中,一个类的变化可能会影响到另一个类。

下图为关系由弱到强排序
在这里插入图片描述
类图绘制

设计模式的分类

创建型模式(Creational Patterns):
单例模式(Singleton Pattern)
工厂模式(Factory Pattern)
抽象工厂模式(Abstract Factory Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)

结构型模式(Structural Patterns):
适配器模式(Adapter Pattern)
桥接模式(Bridge Pattern)
组合模式(Composite Pattern)
装饰器模式(Decorator Pattern)
外观模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)

行为型模式(Behavioral Patterns):
责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
备忘录模式(Memento Pattern)
观察者模式(Observer Pattern)
状态模式(State Pattern)
策略模式(Strategy Pattern)
模板方法模式(Template Method Pattern)
访问者模式(Visitor Pattern)

其中常用的为

  1. 工厂
  2. 单例
  3. 装饰
  4. 策略
  5. 代理
  6. 观察者

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++常用的输入输出方法(ACM模式)

文章目录 前言一、输入输出方法1、cin2、getline()3、getchar() 二、算法案例1、一维数组1.1 输入固定长度1.2长度不固定 2、固定二维数组3、以非空格隔开的元素输入3、常见数据结构定义以及输入3.1 链表 前言 C中的输入输出函数有很多,我们本章只针对大部分算法题…

Makefile 快速入门

参考自:Makefile 20分钟入门,简简单单,展示如何使用Makefile管理和编译C代码_哔哩哔哩_bilibili 注: 视频中用的是C,博主这里用C语言实现 喜欢老师的于老师的还请多多点赞,觉得博主写得不错的,也可以点赞、收藏哦 本…

mars3d实现获取线上不同历里程的坐标

mars3d实现获取线上不同历里程的坐标应用效果 线路数据是这样的,由很多段组成的,是不是就只能一段一段去计算看处于哪一段上具体位置 相关说明:想要实现以上效果的话,mars3d实现需要以下两点 1、需要合并线 2、可以利用 http://m…

学习周报:文献阅读+Fluent案例+有限体积法理论学习

目录 摘要 Abstract 文献阅读:基于物理信息神经网络的稀疏数据油藏模拟 文献摘要 文章讨论|结论 各方程和原理简介 PINN简介 域分解 实验设置 单相油藏问题 油水两相问题 Fluent实例:Y型弯管中的流体混合分析 几何建模部分 网格划分 求解器设…

贝叶斯统计实战:Python引领的现代数据分析之旅

贝叶斯统计这个名字取自长老会牧师兼业余数学家托马斯贝叶斯(Thomas Bayes,1702—1761),他最先推导出了贝叶斯定理,该定理于其逝世后的1763年发表。但真正开发贝叶斯方法的第一人是Pierre-Simon Laplace(1749—1827),因此将其称为…

C++|STL-list运用(1)

cplusplus.com/reference/list/list/?kwlist list介绍 list是一个双向循环链表,双向循环链表它的每个节点都有两个链接,一个指向前一个节点,另一个指向下一个节点,且最后一个结点指向头节点。 结点组成 1.数据域 2.指针域 &a…

多校园版 校园跑腿小程序源码系统 跑腿达人自主入住接单 带完整的安装代码包以及部署教程

近年来,随着移动互联网的普及和高校信息化的推进,校园跑腿服务逐渐成为了校园内的一种新兴业态。然而,市场上的校园跑腿小程序大多功能单一、缺乏个性化定制,难以满足不同高校、不同用户的需求。因此,小编给大家分享一…

Java:SpringBoot如何优化启动速度

一、yml中设置懒加载 spring:main:lazy-initialization: true 二、SpringBoot启动类中添加注解 Indexed (Spring5才有该注解) Indexed EnableAsync RestController SpringBootApplication(exclude {WxMaAutoConfiguration.class}) EnableTransactionM…

web服务的部署及高级优化

搭建web服务器 1.1、配置主机IP以及软件仓库搭建 [rootserver129 ~]# vmset.sh 100 //主机IP配置为172.25.254.100 1.2、查看搭建web服务器所需的软件包 [rootserver100 ~]# dnf search nginx 名称 精准匹配:nginx nginx.x86_64 : A high performance web serve…

WEB攻防-PHP特性-metinfoCMS审计实例

前置知识&#xff1a;PHP函数缺陷 测试环境&#xff1a;MetInfo CMS 函数缺陷导致的任意文件读取 漏洞URL&#xff1a;/include/thumb.php?dir 漏洞文件位置&#xff1a;MetInfo6.0.0\app\system\include\module\old_thumb.class.php <?phpdefined(IN_MET) or exit(No…

Blender曲线操作

1.几种常见建模方式 -多边形建模&#xff1a;Blender&#xff0c;C4D&#xff0c;3DsMax&#xff0c;MaYa -曲线&#xff1a; -曲面&#xff1a;Rhino&#xff08;Nurbs&#xff09; -雕刻&#xff1a;Blender&#xff0c;ZBrush -蜡笔&#xff1a;Blender 1&#xff09;新…

【Linux】dlopen: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29‘ not found

[30116] Error loading Python lib /tmp/_MEIlvdUu6/libpython3.8.so.1.0: dlopen: /lib/x86_64-linux-gnu/libm.so.6: version GLIBC_2.29 not found (required by /tmp/_MEIlvdUu6/libpython3.8.so.1.0)1 cd到指定路径 cd /usr/local 2 下载 wget http://ftp.gnu.org/gnu/gl…

电影交流|基于SprinBoot+vue的电影交流平台小程序系统(源码+数据库+文档)

电影交流平台目录 目录 基于SprinBootvue的电影交流平台小程序系统 一、前言 二、系统设计 三、系统功能设计 1用户信息管理 2 电影信息管理 3公告信息管理 4论坛信息管理 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取…

Python自学篇3-PyCharm开发工具下载、安装及应用

一、Python开发工具 自学篇1中讲到了安装Python之后出现的几个应用程序&#xff0c;其中IDLE、Python.exe都可以用来编写python程序&#xff0c;也可以进行调试&#xff1b;但是比较基础&#xff0c;比较原始&#xff0c;调试不方便&#xff0c;界面也不友好&#xff0c;需要更…

Apache Seata AT 模式事务隔离级别与全局锁设计

title: 详解 Seata AT 模式事务隔离级别与全局锁设计 author: 张乘辉 keywords: [Seata、分布式事务、AT模式、Transaction、GlobalLock] description: Seata AT 模式的事务隔离是建立在支事务的本地隔离级别基础之上的&#xff0c;在数据库本地隔离级别读已提交或以上的前提下…

八_实验1:创建 VLAN 和划分端口

1、实验目的 通过本实验可以掌握&#xff1a; VLAN的概念。创建VLAN的方法。把交换机端口划分到VLAN中的方法。 2、实验​​​​​​拓扑 创建 VLAN 和划分端口的实验拓扑如下图所示。 图8-5 创建 VLAN 和划分端口的实验拓扑 3、实验步骤 &#xff08;1&#xff09;实验准…

力扣-有效的数独

请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 &#xff0c;验证已经填入的数字是否有效即可。 数字 1-9 在每一行只能出现一次。数字 1-9 在每一列只能出现一次。数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。&#xff08;请参考示例图&#xff09; 注…

AI图书推荐:基于AI的商业数据分析应用

《基于AI的商业数据分析应用》&#xff08;AI-Based Data Analytics: Applications for Business Management&#xff09;的作者是Kiran Chaudhary、 Mansaf Alam。 本书涵盖了与营销和商业分析相关的各种主题。它探讨了组织如何通过使用数据分析及时做出更好的决策来增加利润。…

verilog分析task的接口设计,证明这种写法:assign {a,b,c,d} = links;

verilog分析task的接口设计&#xff0c;证明这种写法&#xff1a;assign {a,b,c,d} links; 1&#xff0c;task在状态机中的使用好处&#xff1a;2&#xff0c;RTL设计3&#xff0c;测试testbench4&#xff0c;波形分析&#xff0c;正确&#xff01; 参考文献&#xff1a; 1&am…

蓝牙核心规范(core Specification)与应用规范(Profile)

加zkhengyang可申请加入蓝牙音频研究开发交流答疑群(课题组)&#xff0c;赠送实际蓝牙耳机项目核心开发资料&#xff0c; 我们看到的大部分资料对于蓝牙协议分层一般是核心规范。 射频&#xff0c;基带&#xff0c;链路管理属于蓝牙硬件模块(一般由硬件实现比如FPGA) 逻辑链…