设计模式相关内容介绍

news2025/1/12 23:16:53

1.学习设计模式好处

  • 提高编程能力、思维能力、设计能力
  • 程序设计更加标准化、代码编制更加工程化,软件开发效率大大提高,缩短项目周期
  • 设计的代码可重用性高、可读性强、可靠性高、 灵活性好、可维护性强

2.设计模式分类

  • 创建型模式
    • 提供创建对象的机制,能够提升已有代码的灵活性和可复用性
  • 结构型模式
    • 将类与对象组装成较大的结构,并同时保持结构的灵活与高效
  • 行为模式
    • 负责对象间的高效沟通和职责委派

3.UML

  • 统一建模语言【unified modeling language】是用来设计软件的可视化建模语言。它的特点是简单、统一,图形化、能表达软件设计中的动态与静态信息
  • UML从目标系统的不同角度出发,定义了用例图、类图、对象图、状态图、活动图、时序图、协作图、构件图、部署图等9种图

1.类图

  • 类图介绍

    • 显示模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其它类的关系等,类图是面向对象建模的主要组成部分
  • 类图作用

    • 描述系统的类的集合,类的属性与类之间的关系,可以简化人们对系统的理解。类图是系统分析和设计阶段的重要产物,是系统编码和测试的重要模型
  • 类的表示法

    • 属性表示方式:可见性 名称 :类型 【=缺省值 (可有可无。默认值)】
    • 方法的表示方式:可见性 名称(参数列表)【:返回值】
    • +(public)-(private)#(protected)

    image-20230113162200606

2.类之间关系的表示方法

  • 关联关系

    关联关系是对象之间的一种引用关系,用于表示一类对象与另一类对象之间的联系。关联关系是类与类之间最常用的一种关系,分为一般关系、聚合关系和组合关系。

    • 单项关联

      image-20230113171612406

    • 双项关联

      image-20230113171649567

    • 自关联

      image-20230113171810102

  • 聚合关系

    聚合关系是关联关系的一种,是强关联关系,是整体与部分之间的关系。聚合关系是通过成员对象来实现的,其中成员对象是整体对象的一部分,但是成员对象可以脱离整体对象而独立存在。

    image-20230113172059109

  • 组合关系

    整体和部分之间更为强烈的聚合关系,整体对象可以控制部分对象的生命周期,一旦整体不存在了,部分对象也不能脱离整体对象而存在

    image-20230113172607739

  • 依赖关系

    对象之间耦合度最弱的一种关联方式,临时性的关系。在代码中,某个类的方法通过局部变量、方法的参数或者静态方法的调用来访问另一个类(被依赖类)中的某些方法来完成一些职责

    image-20230113173200125

  • 继承关系

    对象之间耦合度最大的一种关系,父类与子类之间的关系

    image-20230113173600241

  • 实现关系

    接口与实现类之间的关系,类实现了接口,类中的操作实现了接口中所声明的所有抽象操作

    image-20230113173718166

4.软件设计原则

1.开闭原则

  • 对扩展开放,对修改关闭。当程序需要进行扩展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想达到这样的效果,需要使用接口和抽象类。因为抽象类灵活性好,适应性广,只要抽象的合理,可以基本保持软件架构的稳定。而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了

    image-20230113212128476

2.里氏替换原则

  • 子类可以扩展父类的功能,但不能改变父类原有的功能。子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法。如果通过重写父类的方法来完成新的功能,写起来虽然简单,但整个继承体系的复用性比较差,特别是运行多态频繁时,程序运行出错的概率非常大

    image-20230113221820103

3.依赖倒转原则

  • 高层模块不应该依赖底层模块,两者都应该依赖于抽象;抽象不应该依赖细节,细节应该依赖抽象。要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合

    image-20230113231123896

4.接口隔离原则

  • 客户端不应该被迫依赖它不使用的方法,一个类对另外一个类的依赖应该建立在最小接口上

image-20230113232552073

5.迪米特原则

  • 如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。迪米特法则中的“朋友”是指:当前对象本身、当前对象的成员对象、当前对象所创建的对象、当前对象的方法参数等,这些对象当前对象存在关联、聚合或组合关系,可以直接访问这些对象的方法。

    image-20230114101155626

6.合成复用原则

  • 尽量使用组合或者聚合等关联关系来实现,其次才考虑继承关系来实现

  • 通用类的复用分为继承复用和合成复用

    • 继承复用简单和易实现的优点,但也存在以下缺点
      • 破坏类的封装性,父类对子类是透明的,会将实现细节暴露给子类
      • 子类与父类耦合度高,父类实现的任务改变都会导致子类的实现发生变化,不利于维护和扩展
    • 采用组合或聚合复用时,可以将已有对象纳入新对象中,成为新对象的一部分,新对象可以调用已有对象的功能
      • 维持类的封装性,成员对象的内部细节是新对象不可见的
      • 对象耦合度低,可以在类的成员位置声明抽象

    image-20230114000123638

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

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

相关文章

一文读懂工业级交换机的规范使用

工业交换机具备电信级特性特点,可承受严苛的工作环境,产品种类丰富多彩,交换机配置灵便,可以满足各类工业应用的应用标准。那么,大家使用工业级交换机的过程当中应该如何规范使用呢? 工业级交换机其实质运…

蓝队攻击的四个阶段(四)

目录 一, 外网纵向突破 1.1 何为外网纵向突破 1.2外网纵向突破的主要工作 二, 外网纵向突破的途径 1. Web 网站 2.外部邮件系统 3.边界网络设备 4.外部应用平台 三,内网横向拓展 1. 1何为内网横向拓展 1.2 内网横向拓展的主要工作 …

电商价格监测,关注这些,才算实际到手价

品牌控价的第一项工作,是先找出低价乱价链接,这就需要进行电商价格监测。但是我们搜索品牌链接的时候,会发现网页上的价格是多种多样:有原价(但是划掉了)、促销价、折扣价、惊喜价,优惠活动也是…

localStorage

localStorage localStorage了解 有些数据确实需要存储在本地,但是它却不需要发送到服务器,所以并不适合放在cookie中 localStorage 也是一种浏览器存储数据的方式(本地存储),它只是存储在本地,不会发送…

【Linux】进程间通信(1)

信号 什么是信号?信号是给程序提供一种可以处理异步事件的方法,它利用软件中断来实现。不能自定义信号,所有信号都是系统预定义的。 信号由谁产生? 由shell终端根据当前发生的错误(段错误、非法指令等)Ctr…

商品详情的APP原数据接口测试

一、原数据接口的来源: 原数据接口来源于手机端,随着智能化的发展与普及,越来越多的人都是使用智能手机,这样极大的方便了人民的生活,各大电商平台看准了这个商家,把目光都瞄准这个商机,伴随而…

BP靶场中SQL注入练习

BP靶场中SQL注入练习1.Bp靶场介绍1.1.访问靶场1.2.注意事项2.SQL注入靶场2.1.注意事项2.2.检索隐藏数据2.2.1.开启靶场2.2.2.点击礼物2.2.3.测试类型2.2.4.爆出全部物品(包括隐藏)2.3.登录逻辑2.3.1.开启靶场2.3.2.登录账户2.3.3.注释验证2.3.4.成功登陆2.4.判断列2.4.1.开启靶…

会话技术--cookie和session

一、会话跟踪技术的概述 对于会话跟踪这四个词,我们需要拆开来进行解释,首先要理解什么是会话,然后再去理解什么是会 话跟踪: 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接&#…

变量、作用域与内存

目录 原始值与引用值 动态属性 复制值 传递参数 确定类型 执行上下文与作用域 作用域链增强 变量声明 1.使用var 的函数作用域声明 2. 使用let 的块级作用域声明 3.使用const 的常量声明 标识符查找 垃圾回收 标记清理(最常用) 引用计数 内…

2022__我的嵌入式入坑之路

目录 一、学习篇 51单片机: python爬虫: stm32单片机: ad: 立创EDA: openmv: ardunio: ESP32: 汇编语言: ROS: FreeRTOS: matlab&a…

【学习】大数据关键技术

学习内容描述: 大数据涉及的四个环节是什么? 云计算服务的三种服务类型是什么? 重点知识: 大数据涉及的四个环节:1、数据采集;2、数据存储;3、数据管理;4、数据分析与挖掘。云计算…

大型智慧灌区信息化管理系统云平台 智慧灌区信息化管理系统解决方案

平升电子大型智慧灌区信息化管理系统云平台/智慧灌区信息化管理系统解决方案,对灌区的渠道水位、流量、水雨情、土壤墒情、气象等信息进行监测,同时对泵站、闸门进行远程控制,对重点区域进行视频监控,实现了信息的采集、统计、分析…

基于pyautogui的自动识别定位原神风物之诗琴按键弹奏程序

前言:为了学习pyautogui这个库的使用,我准备用它做点东西。比如一个自动弹琴的程序。不过这个琴不是现实里的琴,而是原神里的风物之诗琴。(这里有个网页版模拟器可以试试:风物之诗琴模拟器 (haveyouwantto.github.io)&…

Spring 监听器listener原理

1.创建本地事件和事件监听器/*** 事件类*/ public class MyEventA extends ApplicationEvent {private static final long serialVersionUID 1L;public MyEventA(Object source) {super(source);System.out.println("MyEventA 构造方法被执行了...");}public void o…

基于matlab开发的车牌检测与字符分割项目附源码

文章目录1 任务概述项目完整matlab源码2 基本流程2.1 车牌定位2.1.1 图像预处理2.1.2 边缘检测2.1.3 形态学操作2.1.4 重操作判断2.1.5 区域选择2.1.6 倾斜校正2.1.7 精确选择2.2 字符分割2.3 字符识别3 结果分析3.1 车牌定位3.2 字符分割3.3 字符识别4 总结5 参考资料1 任务概…

安装vim的最新版本

1、通过源码安装 对于Linux系统,可以通过源码编译来安装最新版本,我在wsl ubuntu下的操作如下: 获取vim的源码: git clone https://github.com/vim/vim.git刚开始我帆了墙,结果下载不动,关了帆墙软件可正常…

【入门AUTOSAR网络管理测试】AUTOSAR网络管理规范需求解读

文章目录前言一、名词解释二、NM报文1.NM报文格式2.NM报文数据场内容三、NM状态机1.NM状态转换图2.状态前言 AUTOSAR Automotive Open System Architecture,汽车开放系统架构,由全球汽车制造商、部件供应商及其他电子、半导体和软件系统公司联合建立&am…

Qt扫盲-QPlainTextEdit理论总结

QPlainTextEdit理论总结一、概述二、用途一:纯文本展示1. 用法2. 只读快捷键三、用途二:纯文本编辑器1. 用法2. 快捷键绑定四、与 QTextEdit 的不同一、概述 QPlainTextEdit是一个只支持纯文本的高级查看器/编辑器。 它经过优化,可以处理大型…

Mac系统下matplotlib中SimHei中文字体缺失报错的解决办法

问题描述import matplotlib.pyplot as plt plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus]False使用matplotlib画图时,因为缺少字体,、图像上label上的中文显示时空白小方块。因为matplotlib默认没有中文。解决方法&#xff…

多维时序 | MATLAB实现VMD-SSA-KELM和VMD-KELM变分模态分解结合麻雀算法优化核极限学习机多输入单输出时间序列预测

多维时序 | MATLAB实现VMD-SSA-KELM和VMD-KELM变分模态分解结合麻雀算法优化核极限学习机多输入单输出时间序列预测 目录多维时序 | MATLAB实现VMD-SSA-KELM和VMD-KELM变分模态分解结合麻雀算法优化核极限学习机多输入单输出时间序列预测预测效果基本介绍程序设计学习小结参考资…