C#中的设计模式
设计模式是软件工程中解决常见问题的可重用方案,在C#中尤为重要,因为它能提升代码的可维护性、可扩展性和复用性。C#作为面向对象语言,支持类、接口、委托等特性,使设计模式实现更灵活。下面我将从设计模式的三大分类(创建型、结构型和行为型)入手,逐步解释每个类型的关键模式、C#实现方式,并提供代码示例。所有内容基于标准GoF设计模式(Gang of Four),确保真实可靠。
1. 创建型模式
创建型模式关注对象的创建机制,帮助控制对象实例化过程。
-
单例模式 (Singleton Pattern)
确保一个类只有一个实例,并提供全局访问点。在C#中,常用静态成员实现。public sealed class Singleton { private static Singleton _instance = null; private Singleton() { } // 私有构造函数防止外部实例化 public static Singleton Instance { get { if (_instance == null) { _instance = new Singleton(); } return _instance; } } } -
工厂方法模式 (Factory Method Pattern)
定义一个接口用于创建对象,但由子类决定实例化哪个类。这在C#中常用于依赖注入。public interface IProduct { void Operation(); } public class ConcreteProduct : IProduct { public void Operation() => Console.WriteLine("具体产品操作"); } public abstract class Creator { public abstract IProduct FactoryMethod(); } public class ConcreteCreator : Creator { public override IProduct FactoryMethod() => new ConcreteProduct(); }
2. 结构型模式
结构型模式处理对象组合,以形成更大的结构。
-
适配器模式 (Adapter Pattern)
使不兼容接口的类能一起工作,常用于集成旧系统。在C#中,通过类或对象适配器实现。public interface ITarget { void Request(); } public class Adaptee { public void SpecificRequest() => Console.WriteLine("特定请求"); } public class Adapter : ITarget { private Adaptee _adaptee = new Adaptee(); public void Request() => _adaptee.SpecificRequest(); } -
装饰器模式 (Decorator Pattern)
动态添加功能到对象,而不修改其结构。C#的委托特性简化了此模式。public abstract class Component { public abstract void Operation(); } public class ConcreteComponent : Component { public override void Operation() => Console.WriteLine("基础操作"); } public abstract class Decorator : Component { protected Component _component; public Decorator(Component component) => _component = component; public override void Operation() => _component.Operation(); } public class ConcreteDecorator : Decorator { public ConcreteDecorator(Component component) : base(component) { } public override void Operation() { base.Operation(); Console.WriteLine("添加额外功能"); } }
3. 行为型模式
行为型模式关注对象间的通信和责任分配。
-
观察者模式 (Observer Pattern)
定义一对多依赖,当一个对象状态改变时,所有依赖者自动更新。C#的事件机制(如event和delegate)天然支持此模式。public class Subject { public event EventHandler StateChanged; private int _state; public int State { get => _state; set { _state = value; OnStateChanged(); } } protected virtual void OnStateChanged() => StateChanged?.Invoke(this, EventArgs.Empty); } public class Observer { public void Update(object sender, EventArgs e) => Console.WriteLine("状态已更新"); } -
策略模式 (Strategy Pattern)
定义一系列算法,封装每个算法,并使它们可互换。在C#中,常用接口和委托实现。public interface IStrategy { void Execute(); } public class ConcreteStrategyA : IStrategy { public void Execute() => Console.WriteLine("策略A执行"); } public class ConcreteStrategyB : IStrategy { public void Execute() => Console.WriteLine("策略B执行"); } public class Context { private IStrategy _strategy; public Context(IStrategy strategy) => _strategy = strategy; public void ExecuteStrategy() => _strategy.Execute(); }
总结
设计模式在C#中能显著提升代码质量:
- 优点:减少代码冗余、增强灵活性、便于团队协作。例如,单例模式确保资源唯一,观察者模式简化事件处理。
- 实践建议:在项目初期规划模式使用,避免过度设计;C#的现代特性(如LINQ或async/await)可与模式结合。
- 学习资源:推荐阅读《设计模式:可复用面向对象软件的基础》一书,并结合C#官方文档实践。
通过以上内容,您能系统掌握C#设计模式的核心。如果有具体场景或问题,欢迎提供更多细节,我可以深入讨论!

被折叠的 条评论
为什么被折叠?



