关于观察者模式有些疑问 = =
观察者设计模式能够解决一对多的问题 但是能不能解决多对多的问题?
比如 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();