简单观察者模式
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class NormalObserver : MonoBehaviour {
public float interval = 3f;
private float timer = 0;
// Update is called once per frame
void Update () {
timer += Time.deltaTime;
if (timer>interval) {
//TODO:
timer = 0;
}
}
}
复杂案例
using System.Collections;
using System.Collections.Generic;
using UnityEngine;/// <summary>
/// 抽象观察者
/// </summary>
public abstract class AbObserver {
public abstract void ReceiveBeautifulGirlMsg(string canDateTime);
}/// <summary>
/// 具体观察者
/// </summary>
public class Observer : AbObserver
{
public string name;public Observer(string name)
{
this.name = name;
}public override void ReceiveBeautifulGirlMsg(string canDateTime)
{
Debug.Log(name + "收到消息,确定她"+canDateTime+"分可以约会。。。展示真正实例的时刻到了!!!");
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;/// <summary>
/// 抽象的通知者
/// </summary>
public interface AbSubject
{
/// <summary>
/// 添加观察者
/// </summary>
/// <param name="observer"></param>
void AddObserver(AbObserver observer);
/// <summary>
/// 移除观察者
/// </summary>
/// <param name="observer"></param>
void RemoveObserver(AbObserver observer);
/// <summary>
/// 通知消息
/// </summary>
void Notify();
}/// <summary>
/// 具体的通知者
/// </summary>
public class Subject : MonoBehaviour, AbSubject
{
private IList<AbObserver> observers;
private string canDateTime=null;
private void Awake()
{
observers = new List<AbObserver>();
}
private void Update()
{
if (BeautifulGirl.instance.CanDate()) {
//此时的时间
canDateTime = Time.time.ToString();
Notify();
}
}
public void AddObserver(AbObserver observer)
{
if (!observers.Contains(observer)) {
observers.Add(observer);
}
}public void Notify()
{
for (int i=0;i<observers.Count;i++) {
observers[i].ReceiveBeautifulGirlMsg(canDateTime);}
}public void RemoveObserver(AbObserver observer)
{
if (!observers.Contains(observer))
{
observers.Remove(observer);
}
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class BeautifulGirl : MonoBehaviour {
private int canDateprobability = 10;
public static BeautifulGirl instance;
private void Awake()
{
instance = this;
}
/// <summary>
/// 是否可以约会
/// </summary>
/// <returns></returns>
public bool CanDate() {
return Random.Range(1, 101) <= canDateprobability;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ObserverConsole : MonoBehaviour {
// Use this for initialization
void Start () {
//ObserverConsole
AbObserver ceo = new Observer("老王");
AbObserver cto = new Observer("老李");
AbObserver cfo = new Observer("老刘");AbSubject subjectZhao = GetComponent<Subject>();
subjectZhao.AddObserver(ceo);
subjectZhao.AddObserver(cto);
subjectZhao.AddObserver(cfo);
}
}