首页 > 其他分享 >23种设计模式

23种设计模式

时间:2024-09-17 15:04:09浏览次数:8  
标签:场景 23 对象 目的 适用 模式 需要 设计模式

23种设计模式

设计模式是软件工程中用于解决特定问题的通用解决方案。常见的设计模式有24种,通常分为三大类:创建型、结构型和行为型。下面是对这24种设计模式的详细解释及其归类:

1. 创建型模式

1.1 单例模式 (Singleton)

  • 目的:确保一个类只有一个实例,并提供一个全局访问点。
  • 适用场景:系统中需要一个唯一的类实例,如配置管理、日志记录等。

1.2 工厂方法模式 (Factory Method)

  • 目的:定义一个创建对象的接口,但让子类决定实例化哪一个类。
  • 适用场景:当一个类不知道它所需要的对象的具体类时,使用工厂方法创建对象。

1.3 工厂方法模式 (Abstract Factory)

  • 目的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定具体类。
  • 适用场景:需要创建多个系列对象时,如用户界面工具包(按钮、文本框等)。

1.4 建造者模式 (Builder)

  • 目的:使用多个简单的对象一步步构建一个复杂的对象。
  • 适用场景:创建一个复杂对象的过程需要多个步骤,并且这些步骤可能会有变化时。

1.5 原型模式 (Prototype)

  • 目的:通过复制现有的实例来创建新的实例,而不是通过实例化新的对象。
  • 适用场景:当对象创建成本较高时,使用现有的对象复制更为高效。

2. 结构型模式

2.1 适配器模式 (Adapter)

  • 目的:将一个类的接口转换成客户希望的另一种接口,使得原本由于接口不兼容而无法一起工作的类能够一起工作。
  • 适用场景:需要将旧系统与新系统兼容时,或者在不同接口之间转换。

2.2 桥接模式 (Bridge)

  • 目的:将抽象部分与实现部分分离,使得它们可以独立变化。
  • 适用场景:在需要将抽象部分与其实现部分解耦,并且它们可能会独立变化时。

2.3 组合模式 (Composite)

  • 目的:将对象组合成树形结构以表示部分-整体层次结构,使得客户端对单个对象和组合对象的使用具有一致性。
  • 适用场景:需要处理部分和整体的层次结构,如文件系统的目录和文件结构。

2.4 装饰者模式 (Decorator)

  • 目的:动态地给对象添加额外的职责,而不改变其结构。
  • 适用场景:需要在运行时为对象添加新功能,而不影响其他对象。

2.5 外观模式 (Facade)

  • 目的:为一组接口提供一个统一的高层接口,使得子系统更易使用。
  • 适用场景:需要简化接口或者对复杂子系统进行简化时。

2.6 享元模式 (Flyweight)

  • 目的:通过共享对象来支持大量的细粒度对象,提高系统性能。
  • 适用场景:需要大量的相似对象而这些对象的创建开销很大时。

2.7 代理模式 (Proxy)

  • 目的:为其他对象提供一种代理以控制对这个对象的访问。
  • 适用场景:需要控制对对象的访问、延迟加载、或者增加功能(如日志)时。

3. 行为型模式

3.1 责任链模式 (Chain of Responsibility)

  • 目的:将请求的发送者和接收者解耦,使多个对象都有机会处理请求,形成一条链。
  • 适用场景:需要处理请求的对象链时,如事件处理系统。

3.2 命令模式 (Command)

  • 目的:将请求封装成一个对象,从而使你可以使用不同的请求、排队请求、记录请求日志,以及支持可撤销操作。
  • 适用场景:需要将操作封装成对象以实现命令队列、操作撤销等功能时。

3.3 解释器模式 (Interpreter)

  • 目的:为语言定义一个文法,并提供一个解释器来解释语言中的句子。
  • 适用场景:需要解释或处理特定文法或语言时,如编程语言解析器。

3.4 迭代器模式 (Iterator)

  • 目的:提供一种方法顺序访问集合对象中的元素,而不暴露集合对象的内部表示。
  • 适用场景:需要遍历集合对象的元素时。

3.5 中介者模式 (Mediator)

  • 目的:定义一个对象,通过封装一系列对象的交互来促进对象之间的松耦合。
  • 适用场景:需要处理对象之间复杂的交互时。

3.6 备忘录模式 (Memento)

  • 目的:在不暴露对象内部状态的情况下,保存和恢复对象的状态。
  • 适用场景:需要保存和恢复对象的状态,如撤销操作。

3.7 状态模式 (State)

  • 目的:允许对象在其内部状态改变时改变它的行为。
  • 适用场景:对象的行为依赖于其状态,并且状态可能会发生变化时。

3.8 策略模式 (Strategy)

  • 目的:定义一系列算法,将每一个算法封装起来,并使它们可以互换。
  • 适用场景:需要在运行时选择算法或策略时。

3.9 模板方法模式 (Template Method)

  • 目的:定义一个操作的算法的骨架,将一些步骤延迟到子类中。
  • 适用场景:需要定义一个算法的步骤,并允许子类修改某些步骤的实现时。

3.10 访问者模式 (Visitor)

  • 目的:表示一个作用于对象结构中的各个元素的操作,使得你可以在不改变元素类的前提下定义作用于这些元素的新操作。
  • 适用场景:需要对对象结构中的元素执行一些操作,并且希望在不改变元素类的情况下添加新操作时。

3.11 观察者模式 (Observer)

  • 目的:定义一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象的状态变化。这样,当主题对象的状态发生变化时,所有依赖于它的观察者都会收到通知并自动更新。
  • 适用场景
    • 当一个对象的状态变化需要通知其他多个对象,而这些对象又不知道彼此的情况时。
    • 当一个对象的改变需要触发多个不同的响应时,观察者模式可以解耦状态和响应之间的关系。
    • 在实现分布式事件处理系统时,也很适合使用观察者模式,比如用户界面组件和数据模型的同步。

标签:场景,23,对象,目的,适用,模式,需要,设计模式
From: https://www.cnblogs.com/20lxj666/p/18347514

相关文章

  • 设计模式---- 门面模式
    门面模式门面模式(FacadePattern)是一种结构型设计模式,用于为复杂子系统提供一个统一、简单的接口,隐藏系统的复杂性。通过门面模式,客户端无需直接与系统的内部组件交互,而是通过门面类与系统打交道,简化了客户端的使用,降低了系统的复杂性和耦合度。门面模式的主要概念定义:门面模......
  • 设计模式---- 工厂模式
    工厂模式工厂模式是一种创建型设计模式,它的主要目的是将对象的创建过程与对象的使用过程分离。工厂模式通过引入工厂类或者工厂方法,隐藏对象创建的复杂性,使得代码更加灵活、可扩展。工厂模式的使用场景主要在于:当我们需要对创建的对象进行封装或延迟创建时,工厂模式是一个很好的选......
  • 【数据分享】1985-2023年30米CLCD土地覆盖栅格数据分享
    1.数据来源​CLCD反映了中国快速的城市化进程和一系列生态工程,揭示了气候变化条件下人为对LC的影响,其在全球变化研究中具有潜在应用价值。2021年7月,武汉大学杨杰、黄昕两位教授共同撰写题为《30mannuallandcoveranditsdynamicsinChinafrom1990to2019》的研究论......
  • springboot+vue在线考试系统的设计与实现演示录像120239【程序+论文+开题】计算机毕业
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展,教育领域正经历着深刻的变革。传统考试方式在效率、便捷性、成本控制及公平性等方面日益显现出其局限性。在线考试系统作为一种新兴的教育技术应用,通过数字化手段实现了考试过程的远程化、自动化与智能化,为教......
  • macOS Ventura 13.7 (22H123) 正式版发布,ISO、IPSW、PKG 下载
    macOSVentura13.7(22H123)正式版发布,ISO、IPSW、PKG下载2024年9月17日凌晨1点,TimCook领导的Apple今天发布了macOS15Sequoia正式版,iPhone镜像、密码应用程序、窗口平铺更新等带来全新体验。Apple还为那些无法升级到Sequoia的用户发布了macOSVentura13.......
  • macOS Sonoma 14.7 (23H124) 正式版发布,ISO、IPSW、PKG 下载
    macOSSonoma14.7(23H124)正式版发布,ISO、IPSW、PKG下载2024年9月17日凌晨1点,TimCook领导的Apple今天发布了macOS15Sequoia正式版,iPhone镜像、密码应用程序、窗口平铺更新等带来全新体验。Apple还为那些无法升级到Sequoia的用户发布了macOSVentura13.7......
  • GitHub 2023排名前十的最佳开源项目
    开源软件(OSS)彻底改变了当今软件开发的方式。在数百万个开源GitHub项目中,要找到最适合需求的开源项目可能会让人不知所措。今天给大家列出2023年增长最快的前10个开源GitHub仓库。通过这些增长最快的开源项目,也可以从整体上了解一下目前技术的整体动向。1、PyGWalker:JupyterNoteboo......
  • 文心一言 VS 讯飞星火 VS chatgpt (348)-- 算法导论23.2 7题
    七、假定图G的一棵最小生成树已经被计算出来。如果在图中加入一个新结点及其相关的新边,我们需要多少时间来对最小生成树进行更新?如果要写代码,请用go语言。文心一言:在图中加入一个新节点及其相关边后,要更新最小生成树(MST),通常意味着需要重新计算包含新节点的最小生成树,因为新节点的加......
  • 2023 CCPC 秦皇岛
    A.MakeSYSUGreatAgainI因为\(k\ge2n\),所以可以顺序按照以阶梯形状摆放,这样可以保证每行每列两个,且\(\gcd\)都是1,剩下的数字随便放就好了。#include<bits/stdc++.h>usingnamespacestd;usingi32=int32_t;usingi64=longlong;#defineinti64usingvi=......
  • Day17 二叉树part07| LeetCode 235. 二叉搜索树的最近公共祖先 ,701.二叉搜索树中的插
    235.二叉搜索树的最近公共祖先235.二叉搜索树的最近公共祖先利用二叉搜索树的特性——有序树,可知,如果中间节点是p和q的公共节点,那个中间节点的数值一定在[p,q]区间因此,从根节点往下搜索,遇到的第一个位于[p,q]或[q,p]区间的节点就是最近公共祖先classSolution{......