观察者模式-红绿灯案例

发布于:2025-09-06 ⋅ 阅读:(12) ⋅ 点赞:(0)

观察者模式在C#中的应用,通过一个红绿灯和汽车的例子,解释了观察者模式的原理和作用。观察者模式是一种一对多的依赖关系,允许多个观察者同时监听一个主题对象,当主题对象的状态发生变化时,会自动通知所有观察者进行更新。通过观察者模式,可以实现对象状态的改变触发其他对象的自动更新。

代码:


Light mylight = new Light();
Car car = new Car();
car.Name = "轿车";
Car car1 = new Car();
car1.Name = "公交车";
Car car2 = new Car();
car2.Name = "救护车";
mylight.AddObserver(car);
mylight.AddObserver(car1);
mylight.AddObserver(car2);

for (int i = 0; i < 3; i++)
{
    mylight.ChangeLight();
    Console.WriteLine("现在指示灯的状态:" + mylight.color);
    Console.WriteLine(car.Name + "的状态:" + car.Statas);
    Console.WriteLine(car1.Name + "的状态:" + car1.Statas);
    Console.WriteLine(car2.Name + "的状态:" + car2.Statas);
}

//////////////////////////////////////////////////////////////////////
//对象类:
//////////////////////////////////////////////////////////////////////
class Light : Observerable
{
    public string color { get; set; }
    public void ChangeLight()
    {
        switch (color)
        {
            case "green":
                color = "red";
                break;
            case "red":
                color = "green";
                break;
            default:
                color = "red";
                break;
        }
        Publish();
    }
}
class Car : Observer
{
    public string Name { get; set; }
    public string Statas { get; set; }

    public override void UpdateStatas(Observerable observer)
    {
        Light light = observer as Light;

        switch (light.color)
        {
            case "green":
                Statas = "gogogo";
                break;
            case "red":
                Statas = "stop";
                break;
            default:
                break;
        }
    }

}


//////////////////////////////////////////////////////////////////////
//抽象类:
//观察者:实现观察被观察者状态更新
//被观察者:包含观察者集合、管理观察者集合函数、状态发布函数
//////////////////////////////////////////////////////////////////////
abstract class Observerable
{
    //观察者集合
    List<Observer> observers = new List<Observer>();
    //管理观察者集合函数
    public void AddObserver(Observer observer)
    {
        observers.Add(observer);
    }
    //状态发布函数
    public void Publish()
    {
        for (int i = 0; i < observers.Count; i++)
        {
            observers[i].UpdateStatas(this);
        }
    }
}

abstract class Observer
{
    //状态更新抽象方法
    public abstract void UpdateStatas(Observerable observer);
}


网站公告

今日签到

点亮在社区的每一天
去签到