UML类图与设计模式/原则

news2024/11/20 6:18:02

目录

  • 类之间的关系
    • 依赖
    • 泛化(继承)
    • 实现
    • 关联
    • 聚合
    • 组合
  • 设计模式的七大原则
  • 设计模式
    • 单例
    • 工厂模式
    • 原型模式(深/浅拷贝)
    • 建造者模式
    • 适配器模式
    • 桥接模式
    • 装饰者模式
    • 组合模式
    • 外观模式
    • 享元模式
    • 代理模式
    • 模板方法模式
    • 命令模式
    • 访问者模式
    • 迭代器模式
    • 观察者模式
    • 中介者模式
    • 备忘录模式
    • 解释器模式
    • 状态模式
    • 策略模式
    • 职责链模式

类之间的关系

  • 类之间的关系:依赖、泛化(继承)、实现、关联、聚合与组合

依赖

  • 只要是在类中用到了对方,那么他们之间就存在依赖关系。如果没有对方,连编绎都通过不了
    在这里插入图片描述

泛化(继承)

在这里插入图片描述

实现

在这里插入图片描述

关联

在这里插入图片描述

聚合

在这里插入图片描述

组合

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

设计模式的七大原则

  • 单一职责原则
  • 接口隔离原则
  • 依赖倒转(倒置)原则
  • 里氏替换原则
  • 开闭原则
  • 迪米特法则(最少知道原则)
  • 合成复用原则

设计模式

单例

在这里插入图片描述

工厂模式

在这里插入图片描述

原型模式(深/浅拷贝)

  • 原型模式(Prototype模式)是指:用原型实例指定后面新创建对象的种类,并且通过拷贝这些原型,创建新的对象
  • 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

建造者模式

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

适配器模式

在这里插入图片描述在这里插入图片描述

桥接模式

在这里插入图片描述在这里插入图片描述
!在这里插入图片描述

装饰者模式

  • 装饰者模式:能够动态的将新功能附加到对象(被装饰者)上,在对象功能扩展方面,它比继承更有弹性,装饰者模式也体现了开闭原则(ocp)
  • 装饰者类和被装饰者类共同实现一个接口,被装饰者类作为装饰者类的成员属性(聚合)
    在这里插入图片描述

组合模式

  • 管理者类和被管理者类共同实现一个接口,被管理者类的集合作为管理者类的成员属性
  • 组合模式和装饰者模式的区别在于,虽然都要实现同一个接口,但是实现类之间的关系不同,以及装饰仅仅是一种功能上的增强,管理就包括对被管理者的增删改
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

外观模式

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

享元模式

  • 将一些对象或数据以特定的方式提供给外部重复使用
    在这里插入图片描述在这里插入图片描述在这里插入图片描述

代理模式

在这里插入图片描述

  • 静态代理,要求代理类和被代理类共同实现同一个接口,且被代理类作为代理类的成员属性(聚合)
    在这里插入图片描述
  • JDK动态代理,是利用JDK的API,动态的在内存中构建代理类对象,但是被代理类要实现和被代理类实现实现的相同接口,因为动态生成的代理类对象是该接口的实现类
  • Cglib动态代理,Cglib代理也叫作子类代理,它是在内存中构建一个被代理类的子类对象从而实现对目标对象功能扩展,Cglib的底层是通过使用字节码处理框架ASM来转换字节码并生成新的类
    • 被代理类的对象的方法如果为final、static,那么就不会被拦截,即只会执行被代理类的对象的方法
      在这里插入图片描述

模板方法模式

在这里插入图片描述在这里插入图片描述

  • 钩子方法:在模板方法模式的父类中,我们可以定义一个方法,它默认不做任何事,子类可以视情况要不要覆盖它,该方法称为“钩子”
    在这里插入图片描述
    在这里插入图片描述

命令模式

  • 命令模式使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦
  • 在命令模式中,会将一个请求(命令)封装为一个对象,以便使用不同参数来表示不同的请求(命令),同时命令模式也支持命令撤销的操作
  • 通俗易懂的理解:将军发布命令,士兵去执行
  • 其中有几个角色:将军(命令发布者)、士兵(命令的具体执行者)、命令(连接将军和士兵)
  • Invoker是调用者(将军),Receiver是被调用者(士兵),MyCommand 是命令,实现了 Command 接口,持有接收对象
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

访问者模式

在这里插入图片描述在这里插入图片描述在这里插入图片描述

迭代器模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

观察者模式

在这里插入图片描述在这里插入图片描述在这里插入图片描述

中介者模式

在这里插入图片描述在这里插入图片描述

备忘录模式

在这里插入图片描述在这里插入图片描述

解释器模式

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述

状态模式

在这里插入图片描述在这里插入图片描述

策略模式

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

职责链模式

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

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

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

相关文章

chatgpt赋能Python-python3_8_5安装后怎么打开

Python3.8.5安装后怎么打开:简易步骤指南 Python是一种高级编程语言,被广泛用于数据分析、机器学习、自动化、网络编程等多个方面。Python语言优雅简洁,易于上手,是编程初学者的最佳入门语言之一。本文将介绍Python3.8.5版本的安…

C++ 红黑树(更新中)

前言 上篇博客学习了平衡二叉搜索树(AVLTree),了解到AVL树的性质,二叉搜索树因为其独特的结构,查找、插入和删除在平均和最坏情况下都是O(logn)。AVL树的效率就是高在这个地方。 但是在AVL树中插入或者删除结点,使得高度差的绝对…

学系统集成项目管理工程师(中项)系列22c_信息化知识(下)

1. 新一代信息技术对产业的推动 1.1. 加快建设宽带、泛在、融合、安全的信息网络基础设施,推动新一代移动通信、下一代互联网核心设备和智能终端的研发及产业化,加快推进三网融合,促进物联网、云计算的研发和示范应用 1.2. 大数据 1.2.1. …

申请GPT-4插件,等待GPT-4插件候补全过程

前言 GPT4相信大家都知道它的升级是带来更多惊喜的,目前GPT4已经推出了网页和插件功能,这些插件是专门为语言模型设计的工具。插件可以帮助 ChatGPT 访问最新信息、运行计算或使用第三方服务。写文记录一下,如果你现正好有需要GPT-4 插件的需…

基于springboot就业信息管理系统

开发技术与环境配置 以Java语言为开发工具,利用了当前先进的springboot框架,以MyEclipse10为系统开发工具,MySQL为后台数据库,开发的一个就业信息管理系统。 SpringBoot框架 SpringBoot是一个全新开源的轻量级框架。基于Spring…

chatgpt赋能Python-python3_8怎么打开

Python 3.8:如何下载和打开 Python 3.8是一种高级编程语言,被广泛应用于人工智能、数据分析和网络编程等领域。本文将介绍如何下载和打开Python 3.8以及其优点和用途。 下载Python 3.8 Python 3.8的下载地址为官方网站。根据不同操作系统的需求&#…

系统清理优化工具:CCleaner

哈喽,大家好。今天带各位小伙伴们学习一款系统清理优化工具——CCleaner。 CCleaner是一款系统优化和隐私保护工具。它可以用来清除Windows系统不再使用的垃圾文件,以腾出更多硬盘空间。也可以清除使用者的上网记录。它的体积小,运行速度快&…

java+springboot高校校友校园信息管理系统

本高校校友信息管理系统使用Web开发,运行在Internet环境之上,系统的后台编程语言使用JAVA,数据库使用MySQL。完成了两个用户角色的功能,管理员管理所有信息,前台学生用户登录后查看公告,在线捐赠申请&#…

docker是怎么决定容器内容存储到哪个目录的?(存储驱动决定的)(乱七八糟的)

文章目录 docker是怎么决定容器内容存储到哪个目录的?docker对我/var这个目录有没有什么要求,比如要求它的文件系统是指定的类型如果我Docker的默认存储驱动是overlay2,但是我/var目录的文件系统不是overlay2,这没影响吗&#xff…

chatgpt赋能Python-python3_7_1如何使用

Python 3.7.1使用指南 Python自从出现以来,已经成为了一个非常流行的编程语言,每年都会更新版本以满足不断变化的市场需求。其中最新版本是Python 3.7.1,它与其前身相比提供了许多改进和新功能,同时也解决了一些已知的问题。本文…

MobileNetV3详解及在pytorch下基于CIFAR10数据集的实现

1 MobileNetV3介绍 MobileNetV3 是由 google 团队在 2019 年提出的轻量化网络模型,传统的卷积神经网络,内容需求大,运算量大,无法再移动设备以及嵌入式设备上运行,为了解决这一问题,MobileNet网络应运而生。…

chatgpt赋能Python-python3_8下载numpy

Python3.8下载numpy:安装步骤与常见问题解决方案 Python3.8是最新版的Python编程语言,它提供了丰富的库和框架支持,包括科学计算库numpy。然而,有些用户可能会在安装numpy时遇到一些麻烦,本文将教你如何下载numpy&…

海康机器视觉工业相机客户端MVS-常用功能CCM

什么是CCM? CCM是一种功能。 CCM矩阵是通过对每一个RGB分量乘以一个校正矩阵来实现色彩校正。当图像经过白平衡处理后,图像整 体会显得比较黯淡,同时多种颜色可能存在不同程度地偏离其标准值。此时需要对图像的色彩乘以校正 矩阵来修正各颜色至其标准值,使图像的整体色彩更…

【智能算法1】模拟退火算法_Python实现

一、模拟退火算法(SA) 1.1 固体退火的原理 加热使得固体融化,然后缓慢地降低温度,以此来让固体内部的粒子排布更加均匀。 分为四个阶段: 升温阶段、降温阶段、等温阶段、达到目标温度退火完成 等温阶段就是在塑造…

chatgpt赋能Python-python3_8安装scrapy

Python3.8 安装 Scrapy 如果你是 Python 开发者,你可能已经听说过 Scrapy:一个开源框架,用于快速高效地抓取和提取网页数据。在本篇文章中,我们将介绍如何在 Python3.8 环境下安装 Scrapy,并解释该过程的每一个步骤。…

chatgpt赋能Python-python3_6怎么算

Python 3&6怎么算?—— Python版本的比较 Python是一款广泛使用的高级编程语言,已经有好几个版本了,其中比较常用的是Python 3和Python 2.7。近年来,Python 3越来越受欢迎,那么Python 3和6怎么算呢?本…

Doxygen源码分析: 根目录文件简要介绍

2023-05-18 22:54:02 ChrisZZ imzhuofoxmailcom Hompage https://github.com/zchrissirhcz 文章目录 1. doxygen 版本2. 文件介绍DockerfileLICENSE.dockerignore.codedocsVERSION.editorconfigLANGUAGE.HOWTOBUILD.txtINSTALL.gitignoreREADME.mdCMakeLists.txt 1. doxygen 版…

一图看懂 chardet 模块:字符编码检测器,兼容 Python2 和 Python3,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 chardet 模块:字符编码检测器,兼容 Python2 和 Python3,资料整理笔记(大全) 🧊摘要🧊模块…

【1++的C++初阶】之内存管理

👍作者主页:进击的1 🤩 专栏链接:【1的C初阶】 文章目录 一,C/C的内存分布二,malloc,realloc,calloc的区别三,C的内存管理- -new和delete初识new和deletenew和delete操作…

宝塔面板webhook 使用教程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 背景1、介绍一下Webhook2、使用步骤1.安装git2.安装WebHook3.添加WebHook4.配置git 钩子 (码云示例)5.私有项目还需要做以下操作 背景 最近…