设计模式期末复习随笔

news2024/10/6 2:26:32

1.以下是23种GOF设计模式对应的设计原则:

  1. 工厂方法模式(Factory Method Pattern):遵循开闭原则,客户端不需要修改就能够新增产品类型。

  2. 抽象工厂模式(Abstract Factory Pattern):遵循开闭原则,客户端不需要修改就能够新增产品族。

  3. 单例模式(Singleton Pattern):保证系统中只有一个实例,并且能够全局访问。

  4. 原型模式(Prototype Pattern):通过复制已有对象生成新对象,减少了对象的创建时间。

  5. 建造者模式(Builder Pattern):将对象的构建与表示分离,使得同样的构建过程能够创建不同的表示。

  6. 适配器模式(Adapter Pattern):将一个类的接口转换为客户端所期望的另一个接口。

  7. 桥接模式(Bridge Pattern):将抽象部分与实现部分分离,使得它们能够独立地变化。

  8. 装饰者模式(Decorator Pattern):动态地为对象添加新的行为。

  9. 组合模式(Composite Pattern):将对象组合成树形结构,以表示"部分-整体"的层次结构。

  10. 外观模式(Facade Pattern):提供一个统一接口,用来访问子系统中的一群接口。

  11. 享元模式(Flyweight Pattern):利用共享技术有效地支持大量细粒度的对象。

  12. 策略模式(Strategy Pattern):定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。

  13. 模板方法模式(Template Method Pattern):定义一个操作中的算法框架,而将一些步骤延迟到子类中。

  14. 观察者模式(Observer Pattern):定义一种一对多的依赖关系,当对象状态发生改变时,所有依赖它的对象都会得到通知并自动更新。

  15. 迭代器模式(Iterator Pattern):提供一种方法访问一个容器对象中各个元素,而又无需暴露该对象的内部细节。

  16. 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。

  17. 命令模式(Command Pattern):将请求封装成对象,从而使能够在不同的请求进行参数化。

  18. 职责链模式(Chain of Responsibility Pattern):将请求的发送者和接收者解耦,使得多个对象都有机会处理这个请求。

  19. 备忘录模式(Memento Pattern):在不破坏封装的条件下,捕获一个对象的内部状态,并在该对象之外保存这个状态。

  20. 状态模式(State Pattern):允许对象在其内部状态改变时改变其行为。

  21. 访问者模式(Visitor Pattern):定义一种新的操作,在不改变各个元素的类的前提下定义作用于这些元素的新操作。

  22. 解释器模式(Interpreter Pattern):给定一个语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。

  23. 中介者模式(Mediator Pattern):定义一个中介对象来封装系列对象之间的交互关系。中介者使得各个对象不需要显式地相互作用,从而更松散地耦合了系统。

2.以下是23种GOF设计模式按照不同类型的划分:

  1. 类创建模式(Class Creation Patterns):关注类和子类的创建,共2种设计模式。
  • 工厂方法模式(Factory Method Pattern)
  • 抽象工厂模式(Abstract Factory Pattern)
  1. 对象创建模式(Object Creation Patterns):关注对象的创建和组合,共3种设计模式。
  • 原型模式(Prototype Pattern)
  • 单例模式(Singleton Pattern)
  • 建造者模式(Builder Pattern)
  1. 类结构模式(Class Structural Patterns):关注类和对象的组合,共6种设计模式。
  • 适配器模式(Adapter Pattern)
  • 桥接模式(Bridge Pattern)
  • 装饰者模式(Decorator Pattern)
  • 组合模式(Composite Pattern)
  • 外观模式(Facade Pattern)
  • 享元模式(Flyweight Pattern)
  1. 对象结构模式(Object Structural Patterns):关注对象和对象的组合,共4种设计模式。
  • 适配器模式(Adapter Pattern)
  • 装饰者模式(Decorator Pattern)
  • 组合模式(Composite Pattern)
  • 代理模式(Proxy Pattern)
  1. 类行为模式(Class Behavioral Patterns):关注类之间的通信,共3种设计模式。
  • 模板方法模式(Template Method Pattern)
  • 策略模式(Strategy Pattern)
  • 命令模式(Command Pattern)
  1. 对象行为模式(Object Behavioral Patterns):关注对象之间的通信,共5种设计模式。
  • 迭代器模式(Iterator Pattern)
  • 观察者模式(Observer Pattern)
  • 职责链模式(Chain of Responsibility Pattern)
  • 备忘录模式(Memento Pattern)
  • 状态模式(State Pattern)
  • 访问者模式(Visitor Pattern)
  • 解释器模式(Interpreter Pattern)

3.组合模式
是一种结构性设计模式,它允许将对象组合成树形结构,使得用户可以以统一的方式处理单个对象和组合对象。组合模式可以分为以下两种类型:

透明式组合模式:所有组件都实现相同的接口,其中包括容器和叶子节点。这样,客户端可以对容器和叶子节点进行相同的操作,而不需要判断当前处理的对象是容器还是叶子节点。

安全式组合模式:容器对象和叶子节点分别实现不同的接口,容器对象中持有一个对所有子节点的引用,而叶子节点没有子节点。客户端需要对容器对象和叶子节点分别进行处理,不能对它们进行统一的操作。安全式组合模式相对于透明式组合模式来说更加灵活,但也更加复杂。

4.懒汉式单例模式和饿汉式单例模式的区别
主要在于对象的实例化时机和线程安全性。

  1. 对象实例化时机:
  • 懒汉式单例模式:在第一次需要使用对象时才进行实例化。这种方式的优点是可以避免只有一部分对象被使用时浪费了系统资源,缺点是在多线程环境下需要保证线程安全。
  • 饿汉式单例模式:在类加载时进行实例化,这种方式的优点是避免了线程安全问题,缺点是如果该实例对象未被使用,则会浪费系统资源。
  1. 线程安全性:
  • 懒汉式单例模式:如果要保证线程安全,需要使用同步机制来保证对象只被初始化一次。但是同步机制会影响性能。
  • 饿汉式单例模式:由于在类加载时就进行了实例化,所以不存在线程安全问题。

综合来看,懒汉式单例模式适合对象较大,创建时间较长,且不一定每次都需要使用的情况;饿汉式单例模式适合对象较小,创建时间较短,且每次都需要使用的情况。

其优缺点总结如下:
懒汉式单例模式:

  • 优点:降低了系统资源的消耗。
  • 缺点:线程不安全,需要使用同步机制来保证线程安全,但同步会影响性能。

饿汉式单例模式:

  • 优点:线程安全,不需要使用同步机制。
  • 缺点:可能浪费系统资源,一旦被加载就无法撤销。

5.简单工厂模式、工厂方法模式和抽象工厂模式的区别
都属于创建型设计模式,它们都关注于对象的创建。

简单工厂模式

通过一个工厂类来创建一些列的产品对象,看起来比较简单,但缺点是当需要增加一个新的产品时,需要修改工厂类的代码,因此不够灵活。

工厂方法模式

通过将具体产品的创建推迟到工厂类的子类中,这样当需要增加一个新的产品时,只需要增加一个新的工厂子类即可。工厂方法模式符合“开闭原则”,但对于复杂的产品族(相关联但并不相同的产品组成的家族),需要创建大量的工厂类,这样会带来一定的开销。

抽象工厂模式

是工厂方法模式的扩展,它提供了一种创建一整套(相关联的)产品对象的方式。在抽象工厂模式中,有一个抽象工厂类,它定义了创建产品的接口,而具体的产品创建则在具体的工厂类中实现。抽象工厂模式可以创建不同类别的产品族,但对于新产品的添加,要求所有的抽象工厂类都需要进行修改才行。

因此,选择哪种设计模式应该根据实际情况进行选择。如果仅存在少量的产品,可以采用简单工厂模式;如果需要创建大量的产品,可以选择工厂方法模式;如果需要创建不同类别的产品族,可以使用抽象工厂模式。

6.产品等级和产品族
产品等级结构:不同工厂生成的同一个类型的产品
产品族:同一个工厂生成的,位于不同产品等级结构中的一组产品

在这里插入图片描述
7.原型模式
的核心是通过复制已有的对象来创建新的对象,可以通过克隆来实现。克隆分为深克隆和浅克隆两种方式。

浅克隆

只复制对象本身及其所有基本数据类型的成员变量,而对于其引用类型的成员变量,只是拷贝了其引用地址,因此,浅克隆后得到的新对象和原对象共享引用类型成员变量。

深克隆

则会复制对象本身及其所有成员变量,包括所有的嵌套对象,即使是引用类型成员变量。这意味着深克隆后得到的新对象和原对象相互独立,互不影响。

而实现深克隆有多种方法,例如通过实现Serializable接口的序列化和反序列化方式、实现Cloneable接口的克隆方法、使用第三方库等。需要根据具体情况来选择最适合的实现方法。

需要注意的是,由于深拷贝需要递归遍历所有引用类型成员变量,因此可能会造成性能问题,实际应用时需要权衡选择。

8.类适配器和对象适配器
都是适配器模式的具体实现方式。它们的主要区别在于实现方式不同:

类适配器
使用继承的方式实现,通过继承适配者类和目标类,将适配者类的接口转换为目标类的接口。

对象适配器
使用组合的方式实现,通过在适配器类中包含适配者类的实例以及目标类的实例,将适配者类的接口转换为目标类的接口。

因此,类适配器只能适配单一的适配者类,而对象适配器可以适配多个适配者类。

9.代理模式的类型
远程,虚拟,安全,智能引用

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

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

相关文章

【严重】Kibana 8.7.0 任意代码执行漏洞

漏洞描述 Kibana是用于Elasticsearch的数据可视化仪表板。Kibana在8.7.0版本引入了Synthetic监控功能,用户可配置编写playwright中的javascript代码实现web应用监控。 具备Kibana登录权限的攻击者可利用此功能编写恶意playwright脚本, 从而在Kibana主机…

5.28 深圳活动|Jina AI 生态助力云原生场景下的 AIGC 应用开发

亚马逊云科技 Community Day 将于 5 月 28 日 在深圳南山区海德酒店 11 楼举办,Jina AI 软件工程师付杰将带来 《Jina AI 生态助力云原生场景下的 AIGC 应用开发》 的主题演讲。 Community Day 是亚马逊云科技全球品牌和社区旗舰活动,由社区领导者发起&a…

5个替代Zendesk的全面指南!

Zendesk是一种广受欢迎的客户支持软件解决方案,适用于各种规模的企业。然而,还有其他几种产品可以取代Zendesk,提供类似甚至更好的功能。在本文中,我们将探索市场上一些最好的Zendesk替代方案。 1、Zoho Desk Zoho Desk是一款基…

SpringBoot拦截器-解决java.io.IOException: Stream closed问题

1.SpringBoot拦截器是什么 SpringBoot拦截器和过滤器是Spring Boot的一种机制,用于对请求和响应进行操作的拦截,是AOP编程的一种体现。该方法可以在不改变代码基本业务和逻辑的前提下对SpringBoot的一些操作进行拦截、过滤和更改。 SpirngBoot拦截器&a…

检错纠错理论——海明码与海明距离

概念解释 先说明几个概念(非严谨定义) 码字:一个包含了数据位和校验位的n位单元,也就是“一种”编码 编码:由码字组成的可以表达传递信息的集合,这里不是指编码的过程,而是一个名词。一个编码…

Unity 环境雾与其它设置

开启雾 window->Rendering->Lighting->Environment Fog Color:雾的颜色。Fog Mode:雾效的模式Fog Density:雾效的浓度,取值范围0~1,数值越大雾效浓度越高。。Linear Fog Start:线性雾效开始距离&…

谈谈 Dapr 的优缺点,应用场景,以及未来的发展趋势,生态成熟度

谈谈 Dapr 的优缺点,应用场景,以及未来的发展趋势,生态成熟度 优点缺点应用场景未来发展趋势生态成熟度 本文采用 GPT4 生成,仅供参考。 Dapr 是一个分布式应用程序运行时,其目标是提供一组通用的功能,可以…

我找到了一个生信分析专用服务器!

写在前面 生信分析离不开计算资源,从事生信工作开始,我都在寻找可以满足我开展分析的服务器,不过在寻找过程中发现了以下问题: 如何获得计算资源、部署分析环境、安装生物信息学软件以及保障计算资源的安全和稳定。 当前面临的主要…

SSM框架学习-请求映射路径、请求参数、json数据传送参数以及日期型参数传递

1. 请求映射路径 在进行多人开发,每个人设置不同的请求路径,要解决冲突问题 设置模块名作为请求路径前缀 两种方式 方式一: public class BookController {//请求路径映射RequestMapping("/book/save")ResponseBodypublic String …

新一代企业数字化联盟成立,甄知科技与众多企业“强强联手”搭建品牌服务生态

5月18日,新一代企业数字化联盟(以下简称“新一代联盟”)成立大会在上海举行。该联盟由包括甄云科技、得帆信息、甄知科技、盖雅工场、甄零科技、易立德信息、鼎医、数划云在内的8家创新型数字化软件科技企业发起,旨在希望通过强强…

【Java入门】数据类型与变量

前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Java入门篇系列,该专栏主要讲解:什么是java、java的数据类型与变…

PyCharm 点击运行,没有执行所有的py文件内容

(JDD_KK原创) 基于 Pycharm,python3 问题:编写了一个测试工程,创建了多个.py文件。 多个py文件为: data_test/test_datademo.py interface_test/test_interface1.py test_test/test_test.py web_test/test…

【LCD 应用编程】获取LCD屏幕参数信息(分辨率、像素深度、RGB格式)

目录 一、LCD显示的基本原理 1、认识 FrameBuffer 2、理解LCD的分辨率和深度 二、接口函数 ioctl 1、函数声明 2、结构体介绍 三、获取LCD屏的信息(分辨率、深度) 一、LCD显示的基本原理 1、认识 FrameBuffer FrameBuffer 是帧缓冲,…

[VPX611]基于 6U VPX 总线架构的SATA3.0 高性能数据存储板

板卡概述 VPX611 是一款基于6UVPX 总线架构的高性能数据存储板,该板卡采用2 片XilinxKintex-7 系列FPGA 作为主控单元,FPGA 内嵌RAID 控制器,最大支持8 个mSATA 盘,最大存储容量可以达到8TByte,持续数据写入带宽可以达…

Scrum专业能力之Scrum框架和用敏捷思维管理产品

一、理解和应用Scrum框架 理解和应用Scrum框架,让团队和组织最多30天就可以迭代增量式交付可上线的具有价值的完工产品。成功地应用Scrum框架要求理解和应用Scrum价值观以及经验主义的原则,以便在处理产品交付的内在复杂性的同时,专业地向组…

浑元太极和领域驱动设计-UMLChina建模知识竞赛第4赛季第2轮

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答,先全部答对者得分,本轮总分为3分。 1. [多选] 开发团队中&am…

在 Visual Studio 2022 中使用 GitHub Copilot chat

本文通过实际应用场景和示例代码展示了 GitHub Copilot Chat 在 Visual Studio 2022 中的优势和特点。最后,鼓励读者在实际工作中尝试使用 Copilot Chat,以提升开发效率和代码质量。希望这些信息和经验能为你在使用GitHub Copilot时提供帮助和启发。 1. …

openssh kex.c拒绝服务漏洞漏洞(CVE-2016-8858)处理

一、漏洞描述 OpenSSH(OpenBSD Secure Shell)是OpenBSD计划组所维护的一套用于安全访问远程计算机的连接工具。该工具是SSH协议的开源实现,支持对所有的传输进行加密,可有效阻止窃听、连接劫持以及其他网络级的攻击。OpenSSH 6.x版…

leetcode二叉树中的最大路径和(java)

二叉树中的最大路径和 leetcode 124题- 原题链接二叉树中的最大路径和 (hard)解题思路二叉树专题 leetcode 124题- 原题链接 leetcode 124 .二叉树的最大路径和 二叉树中的最大路径和 (hard) 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一…

Selenium、JUnit、Appium…一网打尽,轻松掌握自动化测试工具

目录 前言: 一、 自动化测试原理 二、 自动化测试工具和技术 三、 自动化测试案例 四、 总结 前言: 自动化测试是现代软件开发中必不可少的组成部分,它可以让开发者快速、高效地测试软件,并确保其符合预期要求。在本文中&am…