设计模式 简单汇总

news/2025/2/26 7:35:12

设计模式是软件工程中广泛使用的一套解决方案,用于解决常见问题并提高代码的质量。它们分为创建型、结构型和行为型三类,共23种模式。以下是各类别及其常见模式的详细说明:

目录

  • 创建型模式
  • 结构型模式
  • 行为型模式

创建型模式

这些模式关注对象的创建机制,帮助控制实例化过程。

单例模式(Singleton):确保一个类只有一个实例,并提供全局访问点。
应用场景:数据库连接管理、缓存系统等,避免资源浪费和潜在冲突。

工厂方法模式(Factory Method):定义创建对象的接口,由子类决定具体实现。
应用场景:框架开发,需要延迟对象创建逻辑。

抽象工厂模式(Abstract Factory):提供一组用于创建相关或相互依赖对象的接口。
应用场景:处理多个对象家族的创建,如不同数据库的连接池。

生成器模式(Builder):将复杂对象的构建过程与其表示分离,便于不同的构造逻辑。
应用场景:解析配置文件并构建复杂对象。

原型模式(Prototype):通过复制现有对象来创建新实例,减少对象创建开销。
应用场景:对象池或需要频繁克隆的对象管理。

结构型模式

这些模式处理类和对象的组合方式,以实现更灵活的设计。

适配器模式(Adapter):将接口转换为兼容接口,使原本不兼容的类协同工作。
应用场景:遗留系统与新系统的集成,如USB转接成Lightning接口。

装饰器模式(Decorator):动态地添加职责,通过组合的方式扩展对象功能。
应用场景:日志记录、事务管理等需要动态增加功能的场景。

代理模式(Proxy):控制对对象的访问,常用于远程调用、内容过滤或延迟加载。
应用场景:网络资源访问时的代理服务器。

外观模式(Facade):提供简单接口访问复杂子系统,隐藏内部实现细节。
应用场景:API设计,简化调用者的使用流程。

组合模式(Composite):将对象组合成树结构,以管理复杂对象的组成部分。
应用场景:文件系统、部件管理等需要层次化结构的场景。

享元模式(Flyweight):通过共享减少内存使用,常用于缓存或池化资源。
应用场景:处理大量相同状态的对象,如数据库连接池。

桥接模式(Bridge):将接口与其实现分离,支持独立变化。
应用场景:处理不同平台的图形API时,抽象绘图操作与具体实现。

行为型模式

这些模式关注对象之间的通信和算法的协作方式。

责任链模式(Chain of Responsibility):将请求沿着处理者链条传递,直到被处理。
应用场景:错误处理中的多级处理器,每个级别检查并处理错误。

命令模式(Command):将操作封装成对象,便于执行、撤销和组合。
应用场景:宏命令由多个简单命令组成,如图形编辑器的undo功能。

迭代器模式(Iterator):提供遍历集合对象的方法,无需暴露内部结构。
应用场景:文件系统遍历、数据库记录集处理。

中介者模式(Mediator):协调多个组件之间的通信,减少直接依赖。
应用场景:UI框架中的事件处理,协调不同组件的交互。

观察者模式(Observer):定义对象间的一对多依赖关系,一个变化通知所有依赖者。
应用场景:发布-订阅系统、数据模型与视图绑定。

模板方法模式(Template Method):在父类中定义算法骨架,子类实现细节。
应用场景:框架开发,如MVC模式中的请求处理流程。

策略模式(Strategy):将算法或行为封装成接口,支持动态选择和替换。
应用场景:根据条件选择不同的计算方式,如不同计费策略。

状态模式(State):允许对象在内部状态改变时改变其行为。
应用场景:有限状态机实现,如游戏中的角色状态切换。

访问者模式(Visitor):在不修改元素的情况下增加操作,支持复杂类型处理。
应用场景:处理不同类型的数据结构,如XML节点的访问和操作。

总结
设计模式为常见问题提供了一套经过验证的解决方案,帮助开发者写出更高效、可维护和可扩展的代码。理解和应用这些模式需要实践和经验积累,但它们能够显著提升软件开发的质量和效率。


http://www.niftyadmin.cn/n/5868312.html

相关文章

DeepSeek点燃AI大模型战火:编程语言争霸,谁将问鼎“终极武器”王座?

DeepSeek点燃AI大模型战火:编程语言争霸,谁将问鼎“终极武器”王座? 一、DeepSeek:AI大模型竞赛的“导火索” 2023年,中国AI公司深度求索(DeepSeek)发布DeepSeek-R1大模型,凭借其超…

第七章:消息管理模块

目录 第一节:代码实现 1-1.消息持久化管理思想 1-2.MessageMapper类 1-3.QueueMessage类 1-4.MessageManager 第二节:单元测试 下期预告: 消息管理模块在mqserver下实现。 第一节:代码实现 消息管理首先需要消息类&#xff0c…

交换机与路由器连接方式

交换机和路由器连接的三种主要方式如下: 一、直连连接 这是最简单直接的连接方式。通过一根网线将交换机的一个端口与路由器的一个LAN端口相连。这种连接方式适用于小型网络,其中交换机负责局域网内部的数据交换,而路由器则负责将内部网络连接…

回归分析中的回归含义的理解

“回归”这个词在回归分析中有着特定的历史背景和统计意义,它的含义与现代汉语中的“回归”有所不同。以下是详细的解释: 1. 回归的起源 历史背景:回归分析最早由英国统计学家弗朗西斯高尔顿(Francis Galton)在19世纪…

SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)

SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密) 前言 在SpringBoot的项目开发中,大多数情况下 yml 配置文件中存储的密码均以明文形式展示,这种方式显然存在较大的安全隐患。一旦有开发人员离职&…

RGMII(Reduced Gigabit Media Independent Interface)详解

一、RGMII的定义与作用 RGMII(精简版千兆介质无关接口)是一种用于千兆以太网(1Gbps)的高效接口标准,旨在减少传统GMII接口的引脚数量,同时保持相同的传输速率。其核心作用包括: 减少引脚数量&a…

K8s部署主从结构MySQL服务

01 介绍 RC、Deployment、DaemonSet都是面向无状态的服务,它们所管理的Pod的IP、名字、启停顺序等都是随机分配的,而StatefulSet,管理所有有状态的服务。 StatefulSet为了解决有状态服务的问题,它所管理的Pod拥有固定的Pod名称,一定的启停顺序,在StatefulSet中,Pod名字…

灵犀互娱游戏测试开发一面面经

阿里的子公司, 做的是游戏业务, 所以投递的时候把简历上加上了自己的游戏经历. 面试官大哥也围绕着游戏问了一些问题, 面试体验很好~~ 1. 介绍一下自己 (巴拉巴拉一顿说) 2. 看你的简历上有写关于用友的实习, 可以介绍一下那边的业务吗? 还有为什么那边用的c#来写自动化脚…