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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!