观察者模式(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 }
复制代码

 


本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/05/18/2508405.html,如需转载请自行联系原作者

相关文章
|
7月前
|
设计模式 Java Spring
设计模式~观察者模式(Observer)-11
它属于行为型模式的一种。观察者模式定义了一种一对多的依赖关系,一个主题对象可被多个观察者对象同时监听。当这个主题对象状态变化时,会通知所有观察者对象并作出相应处理逻辑。 目录
46 0
|
11月前
|
设计模式 存储
设计模式-观察者模式(Observer)
设计模式-观察者模式(Observer)
73 0
|
12月前
|
设计模式 Java
Java设计模式-观察者模式(Observer)
Java设计模式-观察者模式(Observer)
|
开发者
观察者(observer)
观察者(observer)
105 0
观察者(observer)
|
设计模式 大数据
行为型-Observer
行为型设计模式主要解决的就是“类或对象之间的交互”问题。 原理及应用场景剖析 观察者模式(Observer Design Pattern)也被称为发布订阅模式(Publish-Subscribe Design Pattern)。在 GoF 的《设计模式》一书中,它的定义是这样的: Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically. 翻译成中文就是:在对象之间
93 0
|
存储 设计模式 Java
浅谈JAVA设计模式之——观察者模式(Observer)
定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
164 0
浅谈JAVA设计模式之——观察者模式(Observer)
观察者模式(Observer )
对象间的联动——观察者模式(一)对象间的联动——观察者模式(二)对象间的联动——观察者模式(三)对象间的联动——观察者模式(四)对象间的联动——观察者模式(五)对象间的联动——观察者模式(五)
738 0
|
监控 Java 设计模式