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 }

 

posted @ 2022-01-04 11:50  番茄玛丽  阅读(143)  评论(0编辑  收藏  举报