LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C#23种设计模式

admin
2025年12月26日 11:23 本文热度 1343

一、创建型模式(5 种)

聚焦对象的创建过程,解耦对象创建和使用,提升灵活性。

1. 单例模式(Singleton)

  • 核心思想
    :保证一个类只有一个实例,并提供全局访问点。
  • C# 示例(线程安全版)

public sealed class Singleton{    // 私有静态实例,懒加载    private static readonly Lazy<Singleton> _instance = new Lazy<Singleton>(() => new Singleton());
    // 私有构造函数,禁止外部实例化    private Singleton() { }
    // 全局访问点    public static Singleton Instance => _instance.Value;
    // 测试方法    public void ShowMessage() => Console.WriteLine("单例模式示例");}// 使用Singleton.Instance.ShowMessage();

  • 适用场景
    :配置管理、日志对象、数据库连接池等需唯一实例的场景。

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

  • 核心思想
    :定义创建对象的接口,让子类决定实例化哪个类。
  • C# 示例

// 产品抽象public interface IProduct{    void Use();}// 具体产品Apublic class ProductA : IProduct{    public void Use() => Console.WriteLine("使用产品A");}// 具体产品Bpublic class ProductB : IProduct{    public void Use() => Console.WriteLine("使用产品B");}// 工厂抽象public abstract class Factory{    public abstract IProduct CreateProduct();}// 具体工厂Apublic class FactoryA : Factory{    public override IProduct CreateProduct() => new ProductA();}// 具体工厂Bpublic class FactoryB : Factory{    public override IProduct CreateProduct() => new ProductB();}// 使用Factory factory = new FactoryA();IProduct product = factory.CreateProduct();product.Use(); // 输出:使用产品A

  • 适用场景
    :创建对象需复杂逻辑、需扩展产品类型(如新增 ProductC 只需加 FactoryC)。

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

  • 核心思想
    :创建一系列相关 / 依赖对象,无需指定具体类。
  • 适用场景
    :系统需多套产品族(如 “Windows 控件” 和 “Mac 控件” 两套产品族)。

4. 建造者模式(Builder)

  • 核心思想
    :分步创建复杂对象,控制创建过程。
  • 适用场景
    :创建对象需多步骤(如构建一个包含标题、内容、附件的邮件)。

5. 原型模式(Prototype)

  • 核心思想
    :通过复制已有对象创建新对象,避免重复初始化。
  • 适用场景
    :对象创建成本高(如包含大量数据的对象),需快速复制。

二、结构型模式(7 种)

聚焦类 / 对象的组合结构,优化代码组织,提升复用性。

1. 适配器模式(Adapter)

  • 核心思想
    :将一个类的接口转换成客户端期望的另一个接口。
  • C# 示例

// 目标接口(客户端期望)public interface ITarget{    void Request();}// 适配者(已有但接口不匹配)public class Adaptee{    public void SpecificRequest() => Console.WriteLine("适配者的具体请求");}// 类适配器public class Adapter : AdapteeITarget{    public void Request() => SpecificRequest();}// 使用ITarget target = new Adapter();target.Request(); // 输出:适配者的具体请求

  • 适用场景
    :集成第三方库、复用已有代码但接口不兼容。

2. 装饰器模式(Decorator)

  • 核心思想
    :动态给对象添加功能,不改变原有结构。
  • 适用场景
    :需灵活扩展对象功能(如给咖啡加奶、加糖)。

3. 代理模式(Proxy)

  • 核心思想
    :为对象提供一个代理,控制对原对象的访问。
  • 适用场景
    :远程代理(访问远程对象)、虚拟代理(懒加载)、保护代理(权限控制)。

4. 外观模式(Facade)

  • 核心思想
    :为复杂子系统提供统一入口,简化调用。
  • 适用场景
    :简化复杂 API 调用(如封装多个数据库操作成一个方法)。

5. 桥接模式(Bridge)

  • 核心思想
    :将抽象和实现分离,二者可独立变化。
  • 适用场景
    :多维度变化的对象(如 “形状” 和 “颜色” 两个维度,可独立扩展)。

6. 组合模式(Composite)

  • 核心思想
    :将对象组合成树形结构,统一处理单个对象和组合对象。
  • 适用场景
    :树形结构场景(如文件夹和文件、菜单和子菜单)。

7. 享元模式(Flyweight)

  • 核心思想
    :复用共享对象,减少内存占用。
  • 适用场景
    :大量相似对象(如游戏中的小兵、文字处理中的字符)。

三、行为型模式(11 种)

聚焦对象间的交互和职责分配,提升代码的协作性和可维护性。

1. 观察者模式(Observer)

  • 核心思想
    :定义一对多依赖,一个对象变化时通知所有依赖者。
  • C# 示例(基于内置接口)

// 主题(被观察者)public class Subject : IObservable<string>{    private List<IObserver<string>> _observers = new List<IObserver<string>>();
    public IDisposable Subscribe(IObserver<string> observer)    {        if (!_observers.Contains(observer))            _observers.Add(observer);        return new Unsubscriber(_observers, observer);    }
    public void Notify(string message)    {        foreach (var observer in _observers)            observer.OnNext(message);    }
    private class Unsubscriber : IDisposable    {        private List<IObserver<string>> _observers;        private IObserver<string> _observer;
        public Unsubscriber(List<IObserver<string>> observers, IObserver<string> observer)        {            _observers = observers;            _observer = observer;        }
        public void Dispose() => _observers.Remove(_observer);    }}// 观察者public class Observer : IObserver<string>{    private string _name;
    public Observer(string name) => _name = name;
    public void OnNext(string value) => Console.WriteLine($"{_name} 收到消息:{value}");    public void OnError(Exception error) { }    public void OnCompleted() { }}// 使用var subject = new Subject();var observer1 = new Observer("观察者1");var observer2 = new Observer("观察者2");subject.Subscribe(observer1);subject.Subscribe(observer2);subject.Notify("Hello World"); // 输出两个观察者的消息

  • 适用场景
    :事件通知(如 UI 按钮点击、消息推送)。

2. 策略模式(Strategy)

  • 核心思想
    :定义一系列算法,封装并可互相替换。
  • 适用场景
    :多种算法可选(如排序算法、支付方式)。

3. 命令模式(Command)

  • 核心思想
    :将请求封装为对象,解耦请求者和执行者。
  • 适用场景
    :撤销 / 重做、任务队列、按钮点击逻辑封装。

4. 迭代器模式(Iterator)

  • 核心思想
    :提供遍历聚合对象的方法,无需暴露内部结构。
  • C# 中已内置
    IEnumerable<T>/IEnumerator<T> 就是迭代器模式的实现。

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

  • 核心思想
    :定义算法骨架,子类重写特定步骤。
  • 适用场景
    :算法步骤固定但部分实现可变(如测试用例执行流程:初始化→执行→清理)。

6. 访问者模式(Visitor)

  • 核心思想
    :在不改变对象结构的前提下,定义作用于对象的新操作。
  • 适用场景
    :需对复杂对象结构执行多种不同操作(如报表生成、数据导出)。

7. 中介者模式(Mediator)

  • 核心思想
    :用中介对象封装对象间的交互,减少直接依赖。
  • 适用场景
    :多对象交互复杂(如聊天室、UI 组件间通信)。

8. 状态模式(State)

  • 核心思想
    :将对象的状态封装为独立类,状态变化时切换类。
  • 适用场景
    :对象状态多且状态切换逻辑复杂(如订单状态:待支付→已支付→已发货)。

9. 备忘录模式(Memento)

  • 核心思想
    :保存对象状态,方便后续恢复。
  • 适用场景
    :撤销操作(如编辑器回退、游戏存档)。

10. 解释器模式(Interpreter)

  • 核心思想
    :定义语言的文法规则,解释执行语句。
  • 适用场景
    :简单语法解析(如表达式计算、自定义规则引擎)。

11. 职责链模式(Chain of Responsibility)

  • 核心思想
    :将请求沿着处理链传递,直到被处理。
  • 适用场景
    :请求需多个对象处理(如审批流程、日志级别处理)。

总结

  1. 分类逻辑
    :23 种设计模式分为创建型(5 种,管对象创建)、结构型(7 种,管类 / 对象组合)、行为型(11 种,管对象交互)三大类,核心目标是解耦、复用、可扩展
  2. 使用原则
    :设计模式是 “工具” 而非 “规则”,需结合场景选择(如单例解决唯一实例,适配器解决接口兼容),避免过度设计。
  3. C# 落地
    :C# 提供了很多语法糖简化模式实现(如Lazy<T>实现线程安全单例、IEnumerable<T>内置迭代器),优先使用语言内置特性。

该文章在 2025/12/26 11:23:26 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved