C#之设计模式:观察者模式
特点:又叫发布者/订阅者模式,定义了一种一对多的关系,当被监听对象发生变化时,会通知所有观察者对象。
思考:委托里学过的多播委托,一个委托可以注册多个方法,当这个委托执行时,所有的方法都会被调用。
案例:猫追老鼠经典案例。一只猫来了之后,所有的老鼠都跑了。
1 using System.Collections; 2 using System.Collections.Generic; 3 using UnityEngine; 4 using System; 5 6 public class Visit : MonoBehaviour { 7 private void Start() 8 { 9 Cat cat = new Cat("汤姆"); 10 Mouse mouse1 = new Mouse("杰瑞", cat); 11 Mouse mouse2 = new Mouse("凯瑞", cat); 12 Mouse mouse3 = new Mouse("马瑞", cat); 13 cat.Coming(); 14 } 15 } 16 public class Animal 17 { 18 public string name; 19 public Animal(string name) 20 { 21 this.name = name; 22 } 23 public virtual void Run() { } 24 } 25 public class Cat : Animal 26 { 27 public Action action; //发布者 28 public Cat(string name):base(name){} 29 public override void Run() 30 { 31 Debug.Log(this.name+"去追老鼠了"); 32 } 33 public void Coming() 34 { 35 Debug.Log(this.name+"来了"); 36 if (action != null) 37 { 38 action(); 39 this.Run(); 40 } 41 } 42 } 43 public class Mouse : Animal 44 { 45 public Mouse(string name,Cat cat) : base(name) 46 { 47 cat.action += this.Run; //订阅者 48 } 49 public override void Run() 50 { 51 Debug.Log(name + "跑了"); 52 } 53 }