UML类图与设计模式/原则

news/2024/11/16 21:23:47/

目录

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

类之间的关系

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

依赖

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

泛化(继承)

在这里插入图片描述

实现

在这里插入图片描述

关联

在这里插入图片描述

聚合

在这里插入图片描述

组合

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

设计模式的七大原则

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

设计模式

单例

在这里插入图片描述

工厂模式

在这里插入图片描述

原型模式(深/浅拷贝)

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

建造者模式

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

适配器模式

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

桥接模式

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

装饰者模式

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

组合模式

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

外观模式

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

享元模式

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

代理模式

在这里插入图片描述

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

模板方法模式

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

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

命令模式

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

访问者模式

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

迭代器模式

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

观察者模式

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

中介者模式

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

备忘录模式

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

解释器模式

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

在这里插入图片描述

状态模式

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

策略模式

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

职责链模式

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


http://www.ppmy.cn/news/73420.html

相关文章

分布式锁解决方案_基于Redisson实现的分布式锁实现

Redisson介绍: https://github.com/redisson/redisson/wiki Redisson - 是一个高级的分布式协调Redis客服端,能帮助用户在分布式环境中轻松实现一些Java的对象,Redisson、Jedis、Lettuce是三个不同的操作 Redis 的客户端,Jedis、…

Todoist 的 10 种最佳替代品(功能、优点、缺点、定价)

寻找最好的 Todoist 替代品? Todoist对项目管理者来说并不陌生,它自 2007 年以来就一直很出名! ……但是作为老牌的组织类应用程序之一,现在再用它是否会觉得有点不顺手? 虽然它为了更好适应当今的工作节奏&#xf…

数据库设计三大范式

数据库设计三大范式 范式就是数据库表设计的依据,教你怎么进行数据库表的设计的。 ● 第一范式:要求任何一张表都必须要有主键,每一个字段原子性不可再分。 ● 第二范式:建立在第一范式的基础之上,要求所有非主键字段完…

在服务器上重新运行flask项目

我昨天运行我的flask项目,因为依赖冲突而重新生成了requirements.txt,现在我需要重新创建虚拟环境吗? 删除了一个依赖:flask_jwt 是的,建议您在生成新的 requirements.txt 文件后重新创建虚拟环境。这样可以确保您的…

2023年NOC大赛创客智慧编程赛项Python 复赛模拟题(二)

题目来自:NOC 大赛创客智慧编程赛项Python 复赛模拟题(二) NOC大赛创客智慧编程赛项Python 复赛模拟题(二) 第一题: 编写一个成绩评价系统,当输入语文、数学和英语三门课程成绩时,输出三门课程总成绩及其等级。 (1)程序提示用户输入三个数字,数字分别表示语文、数学、…

能否在Ubuntu上创造一个虚拟的Ubuntu环境?

可以的。在 Ubuntu 上创建虚拟的 Ubuntu 环境的方式有很多种,常用的有使用 Docker 和虚拟机(如 VirtualBox,VMware)等。 方法 使用 Docker: Docker 是一种容器技术,它能够让你在隔离的环境中运行应用程序。Docker 可…

Linux Audio (7) DAPM-4 Path/Route添加过程

DAPM-4 Path/Route添加过程 route分类:route转化为Pathcodec驱动add widgetMechine驱动add kcontrol route分类: 常规route {“sink”, NULL, “source”},其path->connect1 sink widget是Mixer {“Mixer”, name1, “source1”} {“Mixe…

[CISCN 2019华东南]Web4 day5

考察:任意文件读取 获取网卡地址 伪随机 打开界面,点击read somethings直接进行了跳转 直接修改url,发现没显示,但是访问错误的路由就会有no response 读取flag也无果,那就读一下/app/app.py,为什么读这个&…