读书人

关于观察者模式有点疑问 = =

发布时间: 2012-12-30 10:43:14 作者: rapoo

关于观察者模式有些疑问 = =
观察者设计模式能够解决一对多的问题 但是能不能解决多对多的问题?

比如 A被C、D、E观察,B被C、D、E观察,A与B没有任何关系
问 这种情况该怎么处理?
[解决办法]
...这不是问题
看这个大话设计模式上的例子


static void Main(string[] args)
{
//老板胡汉三
Boss huhansan = new Boss();

//看股票的同事
StockObserver tongshi1 = new StockObserver("魏关姹", huhansan);
//看NBA的同事
NBAObserver tongshi2 = new NBAObserver("易管查", huhansan);

huhansan.Update += new EventHandler(tongshi1.CloseStockMarket);
huhansan.Update += new EventHandler(tongshi2.CloseNBADirectSeeding);

//老板回来
huhansan.SubjectState = "我胡汉三回来了!";
//发出通知
huhansan.Notify();

Console.Read();


}

你自己都知道A和B没有任何关系。这里老板就是A,再模仿老板建立个总监类就是B。多一个观察者b而已。
b和其他类没有耦合关系。故直接扩展建个总监类B,这也是开闭原则的好处了,要增加功能直接扩展,不用修改原来的类。当然客户端加代码是不可避免的。
相应的,上面main方法下添加如下代码:

//总监王麻子
Zongjian wangmazi = new Zongjian();

//看股票的同事
StockObserver tongshi1 = new StockObserver("魏关姹", wangmazi );
//看NBA的同事
NBAObserver tongshi2 = new NBAObserver("易管查", wangmazi );

wangmazi.Update += new EventHandler(tongshi1.CloseStockMarket);
wangmazi.Update += new EventHandler(tongshi2.CloseNBADirectSeeding);

//总监回来
wangmazi.SubjectState = "我王麻子回来了!";
//发出通知
wangmazi.Notify();
Console.Read();

读书人网 >软件开发

热点推荐