常用设计模式简介

embedded/2024/10/18 18:15:39/

设计模式是在软件设计中常见问题的通用可重用解决方案。它们分为三大类:创建型模式、结构型模式和行为型模式。下面是这三类中一些常用设计模式的概述:

创建型模式

  1. 单例模式(Singleton)

    • 保证一个类只有一个实例,并提供一个全局访问点。
    • 通常用于日志记录、配置管理等场景。
  2. 工厂模式(Factory)

    • 提供创建对象的接口,但隐藏具体创建逻辑,让代码对类的实例化过程解耦。
    • 分为简单工厂、工厂方法和抽象工厂等变体。
  3. 建造者模式(Builder)

    • 分步骤构建复杂对象,允许用户通过不同的具体建造者来定制对象的创建过程。
  4. 原型模式(Prototype)

    • 通过克隆已有对象来创建新对象,适用于创建成本高或结构复杂的对象。

结构型模式

  1. 适配器模式(Adapter)

    • 让原本不兼容的接口可以协同工作,通过适配器将一个接口转换为客户期望的另一个接口。
  2. 装饰器模式(Decorator)

    • 动态地给一个对象添加额外的职责,而不改变其原有的结构。
    • 常用于功能的灵活扩展,如日志记录、权限控制等。
  3. 代理模式(Proxy)

    • 为其他对象提供一个替身或占位符,以控制对真实对象的访问。
    • 分为远程代理、虚拟代理等多种类型。
  4. 桥接模式(Bridge)

    • 将抽象部分与实现部分分离,使它们可以独立变化。
    • 适用于希望将抽象和实现解耦,两者可以独立扩展的情况。

行为型模式

  1. 观察者模式(Observer)

    • 定义对象间一对多的依赖关系,当一个对象的状态改变时,所有依赖于它的对象都会得到通知并自动更新。
  2. 策略模式(Strategy)

    • 定义一系列算法,将每个算法封装起来,并使它们可以相互替换。
    • 允许算法的变化独立于使用算法的客户。
  3. 模板方法模式(Template Method)

    • 定义一个操作中的算法骨架,而将一些步骤延迟到子类中实现。
    • 使得子类可以在不改变算法结构的情况下重定义算法中的某些步骤。
  4. 责任链模式(Chain of Responsibility)

    • 使多个对象有机会处理请求,从而避免请求的发送者和接收者之间的耦合。
    • 每个对象都持有下一个对象的引用,形成一条链。

这些模式在实际开发中广泛应用,能够帮助开发者编写更加灵活、可维护和易于扩展的代码。如果您对某个具体模式有更深入的兴趣,或者需要了解如何在代码中应用它们,请提供更具体的问题或情境。


http://www.ppmy.cn/embedded/26765.html

相关文章

十一、大模型-Semantic Kernel与 LangChain 的对比

Semantic Kernel 与 LangChain 的对比 Semantic Kernel 和 LangChain 都是用于开发基于大型语言模型(LLM)的应用程序的框架,但它们各有特点和优势。 基本概念和目标 Semantic Kernel 是一个由微软开发的轻量级 SDK,旨在帮助开发…

WebSocket 深入浅出

WebSocket 深入浅出 1. WebSocket 是什么2. WebSocket 建立连接通信的过程3. WebSocket 和http的联系与区别4. WebSocket 的使用场景及限制 1. WebSocket 是什么 定义:WebSocket 是一种网络通信协议,它允许在单个TCP连接上进行全双工通信。是HTML5规范提…

C语言如何实现⼆级指针对⼆维数组的操作?

一、问题 如何操作⼆维数组? 二、解笞 要更清楚地了解⼆维数组的指针,⾸先要掌握⼆维数组数据结构的特性。⼆维数组可以看成是元素值为⼀维数组的数组。假设有⼀个 3 ⾏ 4 列的⼆维数组a,它定义为: int a[3][4] {{1,2,3,4},{5,…

java序列化和反序列化基础学习

一、前言 前文分析了java的反序列化的DNSURL利用链,但是对于java反序列化的一些过程不是很了解,这篇主要记录下学习java反序列基础知识 二、原理 概念 1、什么是序列化和反序列化 (1)Java序列化是指把Java对象转换为字节序列…

香港Web3,步履蹒跚

4月30日,6支香港虚拟资产现货ETF在香港交易所敲钟上市,正式迎来市场首秀。 而在前一周,香港证监会(SFC)官网就已列出华夏基金(香港)、博时国际和嘉实国际三家基金公司的比特币和以太坊现货ETF,并陆续披露了…

制作Android分区镜像

1 python生成一个sector数据 def get_oem_bootmode(): # Header size SECTOR_SIZE_IN_BYTES 512 header [0 for i in \ range(SECTOR_SIZE_IN_BYTES)] # magic # The ord() built-in function in # Python converts a character # into …

思考!思考!jmeter线程数≠用户并发数

最近又在搞性能测试了,相较于之前的写脚本出数据就完事,这次深入的思考了一下测试出来的指标,到底有什么意义??? 绞尽脑汁思考了好几天,终于有了点思路,写出来与大家分享&#xff0…

【yolov8】yolov8剪枝训练流程

yolov8剪枝训练流程 流程: 约束剪枝微调 一、正常训练 yolo train model./weights/yolov8s.pt datayolo_bvn.yaml epochs100 ampFalse projectprun nametrain二、约束训练 2.1 修改YOLOv8代码: ultralytics/yolo/engine/trainer.py 添加内容&#…