观察者模式-红绿灯案例

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

代码:

cs 复制代码
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);
}
相关推荐
Chan162 天前
【 设计模式 | 行为型模式 观察者模式 】
java·spring boot·后端·spring·观察者模式·设计模式·idea
静心观复2 天前
观察者模式
观察者模式
宁静致远202117 天前
【C++设计模式】第三篇:观察者模式(别名:发布-订阅模式、模型-视图模式、源-监听器模式)
c++·观察者模式·设计模式
xiaopengbc17 天前
在 Python 中实现观察者模式的具体步骤是什么?
开发语言·python·观察者模式
长沙红胖子Qt17 天前
VTK开发笔记(五):示例Cone2,熟悉观察者模式,在Qt窗口中详解复现对应的Demo
qt·观察者模式·vtk·回调
mask哥23 天前
DP-观察者模式代码详解
java·观察者模式·微服务·设计模式·springboot·设计原则
##学无止境##1 个月前
Java设计模式-观察者模式
java·观察者模式·设计模式
我不是程序猿儿1 个月前
【C#】观察者模式 + UI 线程调度、委托讲解
观察者模式·ui·c#
饕餮争锋1 个月前
设计模式笔记_行为型_观察者模式
笔记·观察者模式·设计模式