http://blog.joycode.com/5drush/articles/10699.aspx
意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
适用性:当一个抽象模型有两个方面,其中一个方面依赖于另一方面,将这二者封装在独立的对象中以使他们可以各自独立地改变和复用。当对一个对象的改变需要同时改变其他对象,而不知道具体由多少对象有待改变。
当一个对象必须通知其他对象,而他又不能假定其他对象是谁。换言之,你不希望这些对象是紧密耦合的。
模式分析:
Observer模式的优点是实现了表示层和逻辑层的分离,并定义了稳定的更新消息传递机制,类别清晰,并抽象了更新接口,使得可以有各种各样不同的表示层(观察者)。
缺点:每个外观对象必须继承这个抽象出来的接口类,这样就造成了一些不方便,比如有一个别人的外观对象,并没有继承该抽象类,或者接口不对,我们又希望不修改类直接使用它。虽然可以再应用Adapter模式来一定程度上解决这个问题,但是会造成更加复杂繁琐的设计,增加出错几率。
一个观察者可以观察很多个对象?可以,已经没有这个意义了。
一个对象可以被多个观察者观察?显然,为了实现不同的表现形式。
对象主动的去找自己被谁观察,相当于去派出所注册,当他发生变化时,需要通知派出所,然后派出所就会作出相应的动作。然后在通知的地方实现调用所有观察者的Update方法。
一个类首先是内聚的,它只能修改自己的数据,而不能修改别人的数据,同样自己的数据也不能被别人修改。
请用通俗的语言描述一下代理的含义
1、首先定义一个全局的代理,什么意思?就是要定义在类的外边。
public delegate void UpdateDelegate(string SubjectData);
2、某个类定义一个事件,就是要发生变化的类,一般是数据类Subject,然后让Observer知道这个变化。
public event UpdateDelegate UpdateHandle;
public void Notify()
{
//发出事件
if(UpdateHandle != null)
UpdateHandle(strImportantSubjectData);
}
3、把事件挂上
aSubject.UpdateHandle += new ObserverAdvance.UpdateDelegate(obs.Update);
结束,整个事件代理就这样
浙公网安备 33010602011771号