观察者模式-红绿灯案例

观察者模式在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);
}
相关推荐
UrSpecial2 天前
设计模式:观察者模式
观察者模式·设计模式
sg_knight11 天前
设计模式实战:观察者模式(Observer)
python·观察者模式·设计模式
大数据新鸟13 天前
设计模式详解——观察者模式
观察者模式·设计模式
无籽西瓜a16 天前
【西瓜带你学设计模式 | 第二期-观察者模式】观察者模式——推模型与拉模型实现、优缺点与适用场景
java·后端·观察者模式·设计模式
君主黑暗17 天前
设计模式-观察者模式
观察者模式·设计模式
砍光二叉树17 天前
【设计模式】行为型-观察者模式
java·观察者模式·设计模式
Aaron_dw1 个月前
QT软件开发设计模式-观察者模式
qt·观察者模式·设计模式
Allen_LVyingbo1 个月前
PostgreSQL动态分区裁剪技术:查询性能优化解析(2026年版)
数据库·算法·观察者模式·postgresql·性能优化·架构
蜜獾云1 个月前
设计模式之观察者模式:监听目标对象的状态改变
观察者模式·设计模式·rxjava