C#中的设计模式有哪些?23种设计模式在C#项目中的实战应用解析


答案:C#中23种设计模式分为创建型、结构型和行为型三类,涵盖单例、工厂方法、抽象工厂、建造者、原型等创建型模式用于对象创建;适配器、桥接、装饰器等结构型模式处理对象组合;责任链、命令、观察者等行为型模式管理对象交互;.NET框架已内置部分模式如事件(观察者)、IEnumerable(迭代器),合理应用可提升代码可维护性与扩展性。

c#中的设计模式有哪些?23种设计模式在c#项目中的实战应用解析

设计模式是软件开发中针对常见问题的可复用解决方案。在C#项目中,23种经典设计模式(源自《设计模式:可复用面向对象软件的基础》一书)被广泛应用于提升代码的可维护性、扩展性和解耦程度。以下是对这23种设计模式在C#中的分类解析与实战应用场景说明。

创建型模式(Creational Patterns)

这类模式关注对象的创建机制,帮助系统独立于对象的创建、组合和表示方式。

1. 单例模式(Singleton)

确保一个类只有一个实例,并提供全局访问点。常用于日志记录器、配置管理器或数据库连接池。

C# 实战示例:使用静态构造函数保证线程安全。

public sealed class Logger
{
    private static readonly Logger _instance = new Logger();
    static Logger() { }
    private Logger() { }
    public static Logger Instance => _instance;
}

2. 工厂方法模式(Factory Method)

定义一个创建对象的接口,但由子类决定实例化哪个类。适用于多种数据导出场景(如PDF、Excel导出)。

应用场景:订单处理系统中根据订单类型创建不同的处理器。

3. 抽象工厂模式(Abstract Factory)

提供一个创建一系列相关或依赖对象的接口,而无需指定具体类。适合多主题UI控件库(如深色/浅色主题按钮、文本框)。

C# 实现:通过接口返回控件族,客户端不关心具体实现。

4. 建造者模式(Builder)

将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。常用于构造复杂的DTO或消息对象。

实战:构建HTTP请求对象(含Header、Body、Method等)。

5. 原型模式(Prototype)

通过复制现有对象来创建新对象,避免重复初始化。适用于配置模板克隆或游戏中的敌人AI行为复制。

C# 中可用 ICloneable 接口实现,注意深拷贝与浅拷贝区别。

结构型模式(Structural Patterns)

这类模式处理类或对象的组合,形成更大的结构。

6. 适配器模式(Adapter)

将一个类的接口转换成客户希望的另一个接口。常用于集成第三方库或遗留系统封装。

案例:将老式支付网关接口适配为统一的新接口供系统调用。

7. 桥接模式(Bridge)

分离抽象部分与实现部分,使它们可以独立变化。适合图形绘制系统(形状+渲染平台)。

优势:避免类爆炸,如 Circle + WindowsRenderer、LinuxRenderer 等组合。

8. 装饰器模式(Decorator)

动态地给对象添加功能,替代继承。广泛用于 ASP.NET Core 中间件、IO 流包装。

例子:FileStream 可被 BufferedStream、CryptoStream 层层装饰。

9. 组合模式(Composite)

将对象组合成树形结构以表示“部分-整体”的层次结构。适用于文件系统、菜单系统或组织架构建模。

C# 实现:Directory 和 File 都实现 IFileSystemNode 接口。

10. 外观模式(Facade)

为子系统中的一组接口提供一个统一的高层接口。简化复杂系统的使用。

实战:电商下单服务封装库存、支付、物流等多个服务调用。

11. 享元模式(Flyweight)

共享细粒度对象以有效支持大量小对象。适用于文本编辑器中的字符样式共享。

注意:需区分内部状态(共享)与外部状态(传参)。

12. 代理模式(Proxy)

为其他对象提供一种代理以控制对它的访问。常见于远程代理、虚拟代理、保护代理。

简小派 简小派

简小派是一款AI原生求职工具,通过简历优化、岗位匹配、项目生成、模拟面试与智能投递,全链路提升求职成功率,帮助普通人更快拿到更好的 offer。

简小派 103 查看详情 简小派

应用:WCF 客户端代理、延迟加载图片的占位代理。

行为型模式(Beh*ioral Patterns)

这类模式关注对象之间的职责分配和通信机制。

13. 责任链模式(Chain of Responsibility)

多个对象依次处理请求,直到有一个对象处理它。适合审批流程、异常处理链。

C# 实现:每个处理器持有下一个处理器引用,形成链条。

14. 命令模式(Command)

将请求封装为对象,支持参数化、撤销、日志等功能。适用于菜单命令、宏操作。

例子:文本编辑器中的 Undo/Redo 功能通过命令栈实现。

15. 解释器模式(Interpreter)

定义语言的文法,并建立解释器来解释该语言中的句子。适合简单的规则引擎或表达式计算。

局限:对于复杂语法建议使用 ANTLR 等工具替代。

16. 迭代器模式(Iterator)

提供一种方法顺序访问聚合对象中的各个元素,而不暴露其内部表示。C# 中 IEnumerable 和 IEnumerator 是原生支持。

优势:foreach 语句底层依赖此模式。

17. 中介者模式(Mediator)

用一个中介对象封装一系列对象之间的交互,降低耦合。适用于聊天室、UI组件通信。

实战:窗体中多个控件通过中介协调状态变化。

18. 备忘录模式(Memento)

在不破坏封装性的前提下捕获并外部化对象的内部状态,以便之后恢复。用于实现撤销功能。

实现:保存对象快照,如文档编辑器的历史版本。

19. 观察者模式(Observer)

定义对象间的一对多依赖关系,当一个对象改变状态时,所有依赖者自动更新。C# 中事件(event)机制天然支持。

典型应用:MVVM 中 ViewModel 通知 View 更新(INotifyPropertyChanged)。

20. 状态模式(State)

允许对象在其内部状态改变时改变其行为。适用于订单状态机(待付款、已发货、已完成)。

优点:避免大量 if-else 判断状态转移逻辑。

21. 策略模式(Strategy)

定义一系列算法,将其封装起来,并使它们可以互换。适合不同排序、压缩、认证方式切换。

实战:根据不同用户等级选择不同的折扣计算策略。

22. 模板方法模式(Template Method)

定义一个操作中的算法骨架,而将一些步骤延迟到子类中。常见于框架设计。

例子:BaseService 中定义通用流程,子类实现特定业务逻辑。

23. 访问者模式(Visitor)

表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义新操作。

适用场景:报表生成、持久化操作遍历对象结构。

注意:增加新元素较困难,适合稳定对象结构。

基本上就这些。在实际 C# 项目中,并非所有模式都需要手动实现,.NET 框架本身已内建许多模式(如事件=观察者,IEnumerable=迭代器)。关键是理解意图,在合适场景选择合适模式,避免过度设计。合理使用,代码会更清晰、灵活、易于维护。

以上就是C#中的设计模式有哪些?23种设计模式在C#项目中的实战应用解析的详细内容,更多请关注其它相关文章!


# excel  # linux  # 多个  # 子类  # 适用于  # strea  # win  # pdf  # proxy  # ai  #   # 工具  # cad  # 处理器  # windows  # node  # 这类  # 玩具网站推广费用  # 服装加工设备推广网站  # 睢宁信息化网站推广前景  # 温州网站建设举措  # 临朐百度关键词排名优化  # 对seo岗位的了解  # 会展怎么营销推广产品  # 操作指南  # 如何将  # 有哪些  # 提供一个  # 迭代  # 面向对象  # 东莞网站推广微昕hfqjwl下拉  # 惠州全网推广网站制作  # 淘宝网络营销推广方法 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 百度网盘如何设置上传限额  192.168.1.1路由器后台入口 192.168.1.1默认登录入口  高效调试PHP大型嵌套数组:JSON序列化与可视化工具实践  如何在Python中安全地将环境变量转换为整数并满足Mypy类型检查  多多买菜门店端app订单查看方法  j*a中ArrayBlockingQueue的使用  解决PHP MySQL数据库更新无响应:SQL查询语法错误解析  《合金装备4》有望推出重制版!制作人发话了  Leaflet地图弹出窗口图片动态显示:避免缺失图标的专业指南  Go语言中方法与接收器:指针和值类型的调用机制详解  《单词速记宝》设置学习计划方法  食品生产用水只要符合国家规定的生活饮用水卫生标准就可以吗  顺丰快递单号查询寄件人 顺丰寄件人查询入口  《浙里办》电子发票开具方法  React应用中Commerce.js数据加载与状态管理最佳实践  12306APP选座怎么选充电位置_12306APP带充电插座座位选择方法与技巧  yandex网页版直接登录 yandex官方入口平台访问方法  不吃碳水化合物是健康减肥的好办法吗  Google Cloud Functions 时区处理指南:理解与最佳实践  Golang如何实现HTTP请求重试机制_Golang HTTP请求错误处理策略  多闪APP官方下载安装入口_多闪最新版本获取入口  《虎扑》关闭社区内容推荐方法  windows10怎么更改下载路径_windows10默认存储位置修改教程  济南公交卡手机充值指南  Win10锁屏时间怎么设置 Win10调整自动锁屏时间方法  Excel如何设置动态下拉菜单_Excel表格下拉选项快速方法  哔哩哔哩的|直播|间怎么送礼物_哔哩哔哩|直播|送礼操作指南  《东方航空》添加乘机人方法  画质怪兽120帧安卓和平精英免费版  解决VS Code中Python版本冲突与输出异常的指南  C++ switch case字符串_C++如何实现字符串switch匹配  喜茶GO更换登录账号方法  《幻兽帕鲁》手游帕鲁捕捉技巧分享  《理想汽车》权限管理设置方法  c++如何实现观察者设计模式_c++行为型设计模式实战  OPPO手机参数配置如何开启护眼模式_OPPO手机参数配置护眼模式开启指南  CSS过渡如何实现按钮悬停效果_transition属性控制背景颜色变化  小红书网页版在线直达 小红书网页版免费登录入口  苹果手机手电筒无法开启  Win11怎么开启HDR_Windows 11显示器画质增强设置  vivo云服务一直提示空间不足怎么办 怎么办vivo云服务老是提示空间不足  Go App Engine 项目结构与包管理深度指南  京东物流快递破损了怎么办_京东快递破损理赔流程  sf漫画官网登录入口直达_sf漫画官方正版网址  CodeIgniter 3 中基于 MySQL 数据高效生成动态图表教程  Linux如何优化系统启动流程_Linux启动项优化方案  漫蛙manwa官网浏览入口_漫蛙漫画网页版访问链接  Sublime怎么快速复制文件路径_Sublime右键菜单增强技巧  Lar*el Socialite单设备登录策略:实现用户唯一会话管理  CDR如何复制交互式填充色 

 2025-11-26

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.