C#23种设计模式
|
admin
2025年12月26日 11:23
本文热度 1343
|
一、创建型模式(5 种)
聚焦对象的创建过程,解耦对象创建和使用,提升灵活性。
1. 单例模式(Singleton)
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)
public interface IProduct{ void Use();}public class ProductA : IProduct{ public void Use() => Console.WriteLine("使用产品A");}public class ProductB : IProduct{ public void Use() => Console.WriteLine("使用产品B");}public abstract class Factory{ public abstract IProduct CreateProduct();}public class FactoryA : Factory{ public override IProduct CreateProduct() => new ProductA();}public class FactoryB : Factory{ public override IProduct CreateProduct() => new ProductB();}Factory factory = new FactoryA();IProduct product = factory.CreateProduct();product.Use();
- 适用场景:创建对象需复杂逻辑、需扩展产品类型(如新增 ProductC 只需加 FactoryC)。
3. 抽象工厂模式(Abstract Factory)
- 核心思想
- 适用场景:系统需多套产品族(如 “Windows 控件” 和 “Mac 控件” 两套产品族)。
4. 建造者模式(Builder)
- 核心思想
- 适用场景:创建对象需多步骤(如构建一个包含标题、内容、附件的邮件)。
5. 原型模式(Prototype)
- 核心思想
- 适用场景:对象创建成本高(如包含大量数据的对象),需快速复制。
二、结构型模式(7 种)
聚焦类 / 对象的组合结构,优化代码组织,提升复用性。
1. 适配器模式(Adapter)
public interface ITarget{ void Request();}public class Adaptee{ public void SpecificRequest() => Console.WriteLine("适配者的具体请求");}public class Adapter : Adaptee, ITarget{ 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)
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");
2. 策略模式(Strategy)
3. 命令模式(Command)
4. 迭代器模式(Iterator)
- 核心思想
- C# 中已内置:
IEnumerable<T>/IEnumerator<T> 就是迭代器模式的实现。
5. 模板方法模式(Template Method)
- 核心思想
- 适用场景:算法步骤固定但部分实现可变(如测试用例执行流程:初始化→执行→清理)。
6. 访问者模式(Visitor)
- 核心思想:在不改变对象结构的前提下,定义作用于对象的新操作。
- 适用场景:需对复杂对象结构执行多种不同操作(如报表生成、数据导出)。
7. 中介者模式(Mediator)
8. 状态模式(State)
- 核心思想
- 适用场景:对象状态多且状态切换逻辑复杂(如订单状态:待支付→已支付→已发货)。
9. 备忘录模式(Memento)
10. 解释器模式(Interpreter)
11. 职责链模式(Chain of Responsibility)
- 核心思想
- 适用场景:请求需多个对象处理(如审批流程、日志级别处理)。
总结
- 分类逻辑:23 种设计模式分为创建型(5 种,管对象创建)、结构型(7 种,管类 / 对象组合)、行为型(11 种,管对象交互)三大类,核心目标是解耦、复用、可扩展。
- 使用原则:设计模式是 “工具” 而非 “规则”,需结合场景选择(如单例解决唯一实例,适配器解决接口兼容),避免过度设计。
- C# 落地:C# 提供了很多语法糖简化模式实现(如
Lazy<T>实现线程安全单例、IEnumerable<T>内置迭代器),优先使用语言内置特性。
该文章在 2025/12/26 11:23:26 编辑过