观察者模式-红绿灯案例

观察者模式在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);
}
相关推荐
syt_10133 天前
设计模式之-观察者模式
观察者模式·设计模式
世洋Blog6 天前
SiYangUnityEventSystem,一个Unity中的事件系统
观察者模式·unity·c#·游戏引擎·事件系统
特立独行的猫a8 天前
C++观察者模式设计及实现:玩转设计模式的发布-订阅机制
c++·观察者模式·设计模式
十五年专注C++开发14 天前
sigslot: 一个轻量级实现观察者模式的C++开源库
c++·观察者模式·开源
太过平凡的小蚂蚁15 天前
观察者模式:优雅实现对象间的动态通知机制(行为模式)
观察者模式
崇文殿大学士15 天前
C# MediatR 中介者模式 观察者模式
观察者模式·c#·中介者模式
繁华似锦respect16 天前
Linux - KCP 协议深度解析:原理、与 TCP/UDP 的对比及应用场景
linux·tcp/ip·观察者模式·设计模式·udp
繁华似锦respect17 天前
C++ 设计模式之观察者模式详细介绍
linux·开发语言·c++·windows·观察者模式·设计模式·visual studio
MC丶科19 天前
Java设计模式漫画英雄宇宙-观察者模式 —— Watcher女侠与“消息广播网”!
观察者模式·设计模式
y***54881 个月前
Java设计模式之观察者模式
观察者模式·设计模式