观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖者(观察者)都会收到通知并更新自己的状态。

下面是用C#实现观察者模式的示例代码:

// 主题接口 public interface ISubject { void Attach(IObserver observer); // 注册观察者 void Detach(IObserver observer); // 移除观察者 void Notify(); // 通知所有观察者 }

// 观察者接口 public interface IObserver { void Update(ISubject subject); // 更新观察者状态 }

// 具体主题类 public class ConcreteSubject : ISubject { private List observers = new List(); private int state;

public int State
{
    get { return state; }
    set
    {
        state = value;
        Notify(); // 状态变化时通知所有观察者
    }
}

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

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

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

}

// 具体观察者类 public class ConcreteObserver : IObserver { private int observerState;

public void Update(ISubject subject)
{
    ConcreteSubject concreteSubject = (ConcreteSubject)subject;
    observerState = concreteSubject.State;
    Console.WriteLine("观察者状态已更新为:" + observerState);
}

}

// 测试代码 public class TestObserverPattern { public static void Main(string[] args) { ConcreteSubject subject = new ConcreteSubject(); ConcreteObserver observer1 = new ConcreteObserver(); ConcreteObserver observer2 = new ConcreteObserver();

    subject.Attach(observer1);
    subject.Attach(observer2);

    subject.State = 123;

    subject.Detach(observer2);

    subject.State = 456;
}

}

运行上面的测试代码,输出结果如下:

观察者状态已更新为:123 观察者状态已更新为:123 观察者状态已更新为:456

可以看到,当主题对象ConcreteSubject的状态发生变化时,所有注册的观察者对象都会收到通知并更新自己的状态。

用C#编写观察者设计模式

原文地址: https://www.cveoy.top/t/topic/rk0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录