c语言编程笔录

首页 > C语言 > c语言

c语言

C#设计模式汇总

更新时间:2023-08-09

设计模式简介

设计模式是指在软件设计过程中,对常见问题的解决方案进行总结和抽象,以便于复用和拓展。C#作为一种强类型编程语言,也有许多设计模式可供使用。下面将介绍一些常见的C#设计模式。

单例模式

单例模式是一种创建型模式,其目的是确保一个类只有一个实例,并提供一个全局访问点。在C#中,可以使用以下代码实现单例模式:

public class Singleton
{
   private static Singleton instance;
   private Singleton() { }

   public static Singleton Instance
   {
      get
      {
         if (instance == null)
         {
            instance = new Singleton();
         }
         return instance;
      }
   }
}

通过将构造函数设为私有,其他类无法直接创建Singleton对象。通过静态属性Instance,我们可以在任何地方获取Singleton的唯一实例。

工厂模式

工厂模式是一种创建型模式,其目的是封装对象的创建过程,并将其交给子类去决定。在C#中,可以使用以下代码实现工厂模式:

public abstract class Product
{
    public abstract void Display();
}

public class ConcreteProductA : Product
{
    public override void Display()
    {
        Console.WriteLine("This is Product A");
    }
}

public class ConcreteProductB : Product
{
    public override void Display()
    {
        Console.WriteLine("This is Product B");
    }
}

public abstract class Factory
{
    public abstract Product CreateProduct();
}

public class ConcreteFactoryA : Factory
{
    public override Product CreateProduct()
    {
        return new ConcreteProductA();
    }
}

public class ConcreteFactoryB : Factory
{
    public override Product CreateProduct()
    {
        return new ConcreteProductB();
    }
}

通过抽象工厂类Factory和具体工厂类ConcreteFactory,我们可以根据需要创建不同的产品。具体产品类继承抽象产品类Product,并实现相应的功能。

观察者模式

观察者模式是一种行为型模式,其目的是定义对象之间一对多的依赖关系,以便当一个对象的状态发生改变时,其依赖对象会自动收到通知并更新。在C#中,可以使用以下代码实现观察者模式:

public interface IObserver
{
    void Update(ISubject subject);
}

public interface ISubject
{
    void Attach(IObserver observer);
    void Detach(IObserver observer);
    void Notify();
}

public class ConcreteSubject : ISubject
{
    private List observers = new List();
    private string state;

    public void Attach(IObserver observer)
    {
        observers.Add(observer);
    }

    public void Detach(IObserver observer)
    {
        observers.Remove(observer);
    }

    public void Notify()
    {
        foreach (var observer in observers)
        {
            observer.Update(this);
        }
    }

    public string State
    {
        get { return state; }
        set
        {
            state = value;
            Notify();
        }
    }
}

public class ConcreteObserver : IObserver
{
    public void Update(ISubject subject)
    {
        Console.WriteLine("Observer is notified: " + subject.State);
    }
}

具体主题类ConcreteSubject维护了一个观察者列表,并在状态发生改变时通知观察者。具体观察者类ConcreteObserver实现了更新方法,以便根据接收到的通知对状态进行处理。

总结

C#提供了丰富的设计模式来解决不同的问题,如单例模式用于确保一个类只有一个实例,工厂模式用于封装对象的创建过程,观察者模式用于定义对象之间的一对多关系。通过合理地应用这些设计模式,我们可以使C#代码更加可维护和灵活。