他写的太绕了,看的难受,重新写了下
//示例
public class _09ObserverMode : MonoBehaviour
{
private void Start()
{
//
S1 s1 = new S1();
Observer ob1 = new Observer("ob1");
Observer ob2 = new Observer("ob2");
// 订阅事件
s1.Add(ob1);
s1.Add(ob2);
// 状态变化,通知所有观察者
s1.State = "温度 37";
// 取消订阅示例
s1.Remove(ob1);
s1.Remove(ob2);
}
}
//观察者
public class Observer
{
// 名称
private string name;
// 构造函数
public Observer(string name)
{
this.name = name;
}
// 更新
public void Update(string str)
{
Debug.Log(name + " 收到了通知,更新了 " + str);
}
}
//定义被观察者
public class Subject
{
// 定义事件
private Action<string> onEvent;
// 订阅事件
public void Add(Observer ob)
{
this.onEvent += ob.Update;
}
// 取消订阅事件
public void Remove(Observer ob)
{
this.onEvent -= ob.Update;
}
// 触发事件,通知所有观察者
public void Trigger(string str)
{
this.onEvent?.Invoke(str);
}
}
//实现被观察者
public class S1 : Subject
{
// 状态
private string mState;
// 属性
public string State
{
get
{
return this.mState;
}
set
{
// 状态变化,通知所有观察者
this.mState = value;
this.Trigger(value);
}
}
}