VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
當前位置:
魔兽世界wow > 編程開發 > C#編程 >
  • C#教程之C# 觀察者模式

  • 2019-01-21 20:14 來源:未知

一、定義

魔兽世界wow www.geyjm.icu   觀察者模式(Observer Pattern)是設計模式中行為模式的一種,它解決了上述具有一對多依賴關系的對象的重用問題。此模式的參與者分為兩大類,一類是被觀察的目標,另一類是觀察該目標的觀察者們。正因為該模式是基于“一對多”的關系,所以該模式一般是應用于由一個目標對象和N個觀察者對象組成(當然也可以擴展為有多個目標對象,但我們現在只討論前者)的場合。當目標對象的狀態發生改變或做出某種行為時,正在觀察該目標對象的觀察者們將自動地、連鎖地作出相應的響應行為。

 

二、測試事例

  貓來了,老鼠走了。

  其中貓為被觀察的目標,老鼠為觀察者,當貓來了行為發生時,老鼠們會做出逃跑的響應行為。

1. 貓和老鼠封裝類

復制代碼
 1 class Cat
 2 {
 3     private string name;
 4     private string color;
 5 
 6     public Cat(string name, string color)
 7     {
 8         this.name = name;
 9         this.color = color;
10     }
11 
12     /// <summary>
13     /// 貓進屋(貓的狀態發生改變)
14     /// </summary>
15     public void CatComing()
16     {
17         Console.WriteLine("貓來了");
18 
19         if (catCome != null)
20             catCome();
21     }
22     public Action catCome;              // 委托
23 }
復制代碼

 

復制代碼
 1 class Mouse
 2     {
 3         private string name;
 4         private string color;
 5 
 6         public Mouse(string name, string color)
 7         {
 8             this.name = name;
 9             this.color = color;
10         }
11 
12         /// <summary>
13         /// 逃跑功能
14         /// </summary>
15         public void RunAway()
16         {
17             Console.WriteLine(color + "的老鼠" + name + "跑了");
18         }
19     }
復制代碼

 

 

2. 測試代碼

復制代碼
 1 class Program
 2 {
 3     static void Main(string[] args)
 4     {
 5           
 6 
 7         Cat cat = new Cat("加菲貓", "黃色");
 8         Mouse mouse1=new Mouse("米奇","黑色");
 9         Mouse mouse2 = new Mouse("唐老鴨", "紅色");
10 
11         cat.catCome += mouse1.RunAway;      // 多播委托
12         cat.catCome += mouse2.RunAway;
13 
14         cat.CatComing();            // 貓的狀態發生變化
15 
16         //多一只老鼠,不應該修改貓的類。 
17         Console.ReadKey();
18         
19     }
20 }
復制代碼

 

3. 運行截圖 

 

 

三、適用場景

  1. 當對一個對象的改變需要同時改變其他對象,而又不知道具體有多少對象有待改變的情況下。
  2. 當一個對象必須通知其他對象,而又不能假定其他對象是誰的情況下。
相關教程