观察者模式在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);
}