首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

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

2012-12-30 
关于观察者模式有些疑问 观察者设计模式能够解决一对多的问题但是能不能解决多对多的问题?比如 A被C、D、

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

比如 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();

热点排行