观察者模式-红绿灯案例
观察者模式在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);
}