码迷,mamicode.com
首页 > 其他好文 > 详细

行为型设计模式之观察者模式

时间:2015-07-17 09:33:48      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

结构 技术分享
意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。
适用性
  • 当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。
  • 当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。
  • 当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的。

 

技术分享
  1  using System;
  2     using System.Collections;
  3 
  4     class Subject
  5     {
  6         private ArrayList list = new ArrayList();
  7 
  8         private string strImportantSubjectData = "Initial";
  9         
 10         public string ImportantSubjectData 
 11         {
 12             get 
 13             {
 14                 return strImportantSubjectData;
 15             }
 16             set 
 17             {
 18                 strImportantSubjectData = value;
 19             }
 20         }
 21 
 22         public void Attach(Observer o)
 23         {
 24             list.Add(o);
 25             o.ObservedSubject = this;
 26         }
 27 
 28         public void Detach(Observer o)
 29         {
 30             
 31         }
 32 
 33         public void Notify()
 34         {
 35             foreach (Observer o in list)        
 36             {
 37                 o.Update();
 38             }            
 39         }
 40     }
 41 
 42     class ConcreteSubject : Subject
 43     {
 44         public void GetState()
 45         {
 46             
 47         }
 48 
 49         public void SetState()
 50         {
 51             
 52         }    
 53     }
 54 
 55     abstract class Observer 
 56     {
 57         protected Subject s;
 58         public Subject ObservedSubject 
 59         {
 60             get 
 61             {
 62                 return s;        
 63             }
 64             set 
 65             {
 66                 s = value;
 67             }
 68         }    
 69         abstract public void Update();
 70     }
 71 
 72     class ConcreteObserver : Observer 
 73     {
 74         private string observerName;
 75         
 76         public ConcreteObserver(string name)
 77         {
 78             observerName = name;
 79         }
 80 
 81         override public void Update()
 82         {
 83             Console.WriteLine("In Observer {0}: data from subject = {1}", 
 84                 observerName, s.ImportantSubjectData);
 85         }    
 86     }
 87 
 88     /// <summary>
 89     ///    Summary description for Client.
 90     /// </summary>
 91     public class Client
 92     {     
 93         public static int Main(string[] args)
 94         {          
 95             // Set up everything
 96             ConcreteSubject s = new ConcreteSubject();
 97             ConcreteObserver o1 = new ConcreteObserver("first observer");
 98             ConcreteObserver o2 = new ConcreteObserver("second observer");
 99 
100             s.Attach(o1);
101             s.Attach(o2);
102 
103             // make changes to subject
104             s. ImportantSubjectData = "This is important subject data";
105 
106             // Notify all observers
107             s.Notify();            
108             return 0;
109         }
110     }
观察者模式

 

行为型设计模式之观察者模式

标签:

原文地址:http://www.cnblogs.com/ziranquliu/p/4653405.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!