设计模式学习整理

news/2024/10/13 20:24:39
  • 学习参考:重构大师

创建型模式

  • 创建型模式提供了创建对象的机制, 能够提升已有代码的灵活性和可复用性。

工厂方法模式

  • 在父类中提供一个创建对象的方法, 允许子类决定实例化对象的类型;
  • 实现方式:使用特殊的工厂方法代替对于对象构造函数的直接调用 (即使用 new运算符), 对象仍将通过 new运算符创建, 只是该运算符改在工厂方法中调用罢了。 工厂方法返回的对象通常被称作 “产品”。

抽象工厂模式

  • 创建一系列相关的对象, 而无需指定其具体类;
  • 实现方式:
    • 对于系列产品的每个变体, 都将基于抽象工厂接口创建不同的工厂类,每个工厂类都只能返回特定类别的产品;
    • 客户端代码可以通过相应的抽象接口调用工厂和产品类。 你无需修改实际客户端代码, 就能更改传递给客户端的工厂类, 也能更改客户端代码接收的产品变体。

生成器模式

  • 能够分步骤创建复杂对象, 该模式允许你使用相同的创建代码生成不同类型和形式的对象;
  • 应用场景:对于一个复杂对象, 在对其进行构造时需要对诸多成员变量和嵌套对象进行繁复的初始化工作,通常情况下, 绝大部分的参数都没有使用, 这使得对于构造函数的调用十分不简洁(如大部分参数不适用传入NULL等);
  • 实现方式
    • 将对象构造代码从产品类中抽取出来, 并将其放在一个名为生成器的独立对象中;
    • 每次创建对象时, 你都需要通过生成器对象执行一系列步骤。 重点在于你无需调用所有步骤, 而只需调用创建特定对象配置所需的那些步骤即可;
    • 可以进一步将用于创建产品的一系列生成器步骤调用抽取成为单独的主管类。 主管类可定义创建步骤的执行顺序, 而生成器则提供这些步骤的实现。

原型模式

  • 使使用者能够复制已有对象, 而又无需使代码依赖它们所属的类;
  • 实现方法:将克隆过程委派给被克隆的实际对象;即所有支持克隆的对象声明了一个通用接口, 该接口让你能够克隆对象, 同时又无需将代码和对象所属类耦合。 通常情况下, 这样的接口中仅包含一个克隆方法。

单例模式

  • 保证一个类只有一个实例, 并提供一个访问该实例的全局节点;
  • 实现方式:将默认构造函数设为私有;新建一个静态构建方法作为构造函数供外部调用,其中调用私有构造函数来创建对象, 并将其保存在一个静态成员变量中,对该函数当调用都将返回缓存的对象;

结构型模式

  • 结构型模式介绍如何将对象和类组装成较大的结构, 并同时保持结构的灵活和高效。

适配器模式

  • 使接口不兼容的对象能够相互合作;

桥接模式

组合模式

装饰模式

外观模式

享元模式

代理模式

行为模式

  • 行为模式负责对象间的高效沟通和职责委派。

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

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

相关文章

Seata的AT模式的执行流程

AT 模式(自动补偿模式)AT 模式是一种弱一致性模式,默认情况下使用。 在本地事务提交后,记录日志并进行后续的补偿操作。 通过 Seata 的分支注册、分支提交和分支回滚机制实现。如图:开启全局事物 注册分支事物 执行业务sql 记录undo-log(数据快照) 提交事物状态 则回提交…

unity如何设置九宫格,并且解决边框显示过细的问题

1、如何设置九宫格:2、如何解决九宫格边框显示过细的问题 设置图片属性的Pixels Per Unit为10即可

2024-10-13:用go语言,给定一个二进制数组 nums,长度为 n, 目标是让 Alice 通过最少的行动次数从 nums 中拾取 k 个1。 Alice可以选择任何索引 aliceIndex

2024-10-13:用go语言,给定一个二进制数组 nums,长度为 n, 目标是让 Alice 通过最少的行动次数从 nums 中拾取 k 个1。 Alice可以选择任何索引 aliceIndex,如果对应的 nums[aliceIndex] 是1,Alice会拾取一个1并将其设为0。 之后,Alice可以选择以下两种行动之一: 将一个0…

c++实验1

实验1:// 现代C++标准库、算法库体验 // 本例用到以下内容: // 1. 字符串string, 动态数组容器类vector、迭代器 // 2. 算法库:反转元素次序、旋转元素 // 3. 函数模板、const引用作为形参#include <iostream> #include <string> #include <vector> #inclu…

WINCC7.5SP2报表练习1-增加大量数据记录,报表查询、快速导出查询结果

这是分成两篇记录的学习笔记,这是第一篇,在新浪博客刚刚记录过,那边审查有点慢,时不时还会莫名其妙的清零,在这里也记录一次。 最近现场提出要做报表功能,数据来自两种控制系统,施耐德M580和ABB AC900F,我不想在每一套控制系统上各做报表,加上ABB AC900F的上位机freel…

seata 模式相关

Seata解决分布式的方案 1AT模式 数据最终一致 AT模式使用起来更加简单,无业务侵入,性能更好 AT 模式是 Seata 创新的一种非侵入式的分布式事务解决方案,Seata 在内部做了对数据库操作的代理层,我们使用 Seata AT 模式时,实际上用的是 Seata 自带的数据源代理 DataSource…

基于VL812芯片的USB 3.0Hub设计

前言(设计初衷) 由于自己笔记本插接口不多,在网上购买了一款USB扩展坞,但平时要往返宿舍和工位,书包要放课本、笔记本等,不想再增加重量就动手搞一个放工位上方便。自己动手,丰衣足食(哈哈哈哈其实是自己不想包里放太多东西,同时也想练练画板),接下来就开始进入我们…

LLM中词向量的表示和词嵌入的一些疑问

LLM中词向量的表示和词嵌入的一些疑问 词向量的一些特点 在3blue1brown的视频【官方双语】GPT是什么?直观解释Transformer | 深度学习第5章_哔哩哔哩_bilibili中, 在15min左右介绍了LLM的词嵌入的过程. 其中提到mother的词向量减去father的词向量, 会近似于women的词向量-man的…