观察者模式(Observer)

 1 /*
 2  * 网上商店中如果商品(product)在名称(name)、价格(price)等
 3  * 方面有变化,系统能自动通知会员,将是网上商店区别传统商店的一
 4  * 大特色。应用外观模式,用C#控制台应用程序改进设计。
 5  */
 6 using System;
 7 using System.Collections.Generic;
 8 using System.Linq;
 9 using System.Text;
10 
11 namespace Observer
12 {
13     //观察者-会员类
14     class Vip
15     {
16         private string name;
17         private string rcv_msg;
18         private ShopSystem shopsystem;
19 
20         public Vip(ShopSystem shopsystem, string name)
21         {
22             this.shopsystem = shopsystem;
23             this.name = name;
24         }
25         public void RcvMsg()
26         {
27             rcv_msg = shopsystem.SndMsg;
28             Console.WriteLine("尊敬的{0},{1},预购从速哦~亲~",name,rcv_msg);
29         }
30     }
31     //通知者-系统类
32     class ShopSystem
33     {
34         private string snd_msg;
35         private IList<Vip> vips = new List<Vip>();
36         public string SndMsg
37         {
38             get { return snd_msg; }
39             set { snd_msg = value; }
40         }
41         public void Attach(Vip vip)
42         {
43             vips.Add(vip);
44         }
45         public void Detach(Vip vip)
46         {
47             vips.Remove(vip);
48         }
49         public void Notify()
50         {
51             foreach (Vip vip in vips)
52             {
53                 vip.RcvMsg();
54             }
55         }
56     }
57     //Client-商品类
58     class Product
59     {
60         private string name;
61         private string price;
62         public Product(string name, string price)
63         {
64             this.name = name;
65             this.price = price;
66         }
67         public void SetName(ShopSystem shopsystem,string name)
68         {
69             shopsystem.SndMsg=(""+this.name+"】改名为【"+name+"");
70             shopsystem.Notify();
71             this.name = name;
72         }
73         public void SetPrice(ShopSystem shopsystem,string price)
74         {
75             shopsystem.SndMsg = ("" + name + "】价格由【" + this.price + "】调整为【" + price + "");
76             shopsystem.Notify();
77             this.price = price;
78         }
79     }
80     class Program
81     {
82         static void Main(string[] args)
83         {
84             Product pro1 = new Product("北京方便面","0.7¥");
85             Product pro2 = new Product("武汉热干面","2.0¥");
86             ShopSystem shopsystem = new ShopSystem();
87             shopsystem.Attach(new Vip(shopsystem, "魏艾皮"));
88             shopsystem.Attach(new Vip(shopsystem, "卫蔼霹"));
89 
90             pro1.SetName(shopsystem,"超级北京方便面");
91             pro2.SetName(shopsystem,"无敌武汉热干面");
92             pro1.SetPrice(shopsystem, "0.5¥");
93             pro1.SetPrice(shopsystem, "1.5¥");
94         }
95     }
96 }

 

posted @ 2012-05-18 22:37  ZH奶酪  阅读(524)  评论(0编辑  收藏  举报