观察者模式-红绿灯案例

观察者模式在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);
}
相关推荐
apolloyhl5 天前
观察者模式
观察者模式
JavaBoy_XJ6 天前
行为型-观察者模式
观察者模式
一路往蓝-Anbo6 天前
STM32单线串口通讯实战(五):RTOS架构 —— 线程安全与零拷贝设计
c语言·开发语言·stm32·单片机·嵌入式硬件·观察者模式·链表
killer_queen48047 天前
设计模式-观察者模式
观察者模式·设计模式
崎岖Qiu8 天前
【设计模式笔记26】:深入浅出「观察者模式」
java·笔记·观察者模式·设计模式
一路往蓝-Anbo9 天前
C语言从句柄到对象 (八) —— 当对象会说话:观察者模式与事件链表
c语言·开发语言·数据结构·stm32·单片机·观察者模式·链表
“抚琴”的人13 天前
C#上位机观察者模式
开发语言·观察者模式·c#·上位机
小笔学长14 天前
观察者模式:实现对象间的消息传递
javascript·观察者模式·项目实战·前端开发
有一个好名字14 天前
设计模式-观察者模式
观察者模式·设计模式
WarPigs14 天前
观察者模式与事件中心
观察者模式