C#的设计模式

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#的事件机制(如eventdelegate)天然支持此模式。

    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#设计模式的核心。如果有具体场景或问题,欢迎提供更多细节,我可以深入讨论!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值