当主题内容发生变化时,它的所有订阅者都会收到通知,并做相应的处理。
/// <summary>
/// 观察者基类--->监听该事件的游戏对象基类
/// </summary>
public abstract class Observer
{
public abstract void Update();
}
/// <summary>
/// 具体的观察者1 ---> 监听该事件的游戏对象1
/// </summary>
public class Observer1 : Observer
{
public override void Update()
{
}
}
/// <summary>
/// 具体观察者2---> 监听该事件的游戏对象2
/// </summary>
public class Observer2 : Observer
{
public override void Update()
{
}
}
/// <summary>
/// 主题基类--->相当于游戏事件基类
/// </summary>
public abstract class Subject
{
/// <summary>
/// 所有订阅该主题的观察者对象集合
/// </summary>
private List<Observer> ObserverList = new List<Observer>();
/// <summary>
/// 添加观察者对象
/// </summary>
/// <param name="observer"></param>
public void Attach(Observer observer)
{
if (ObserverList == null)
ObserverList = new List<Observer>();
ObserverList.Add(observer);
}
/// <summary>
/// 移除观察者
/// </summary>
/// <param name="observer"></param>
public void Detach(Observer observer)
{
if (ObserverList == null || ObserverList.Count == 0) return;
ObserverList.Remove(observer);
}
/// <summary>
/// 通知所有观察者
/// </summary>
public void Notify()
{
if (ObserverList == null) return;
foreach (Observer observer in ObserverList)
{
observer.Update();
}
}
}
/// <summary>
/// 主题1--->对应于一件具体的游戏事件
/// </summary>
public class Subject1 : Subject
{
public void ChangeState()
{
//。。。。。
//内容变化消息通知给所有观察者
Notify();
}
}