Author:jimzhang。
观察者模式的使用范围是:当一个对象【类】的变化需要其他的对象知道的时候,可以用这个模式。
但是观察者模式的弱点是:抽象观察者和被观察者【或者说主题统治者和被观察者】之间存在着依赖关系,照成耦合。例如,主题通知者有一个叫做 Notify的方法在这个方法里面要遍历所有的被通知对象,来通知他们。
另外每一个观察者都要有一个相同名称的类似的 Update的方法。
所有,委托模式就出现了,本质上讲,委托模式是一个特殊的观察者模式的。
委托模式【注意这里委托里面的函数要和被委托的类里面要委托的方法参数列表和返回值要相同!】,
下面是一个委托的例子
Interface subject
{
Void notify();
String SubState()
{
Get;
Set;
}
}
Class Boss :Sbujict
{
Public event EventHandler Updater;
Private string action;
Public void Notify()
{
Uptatte();
}
Public string SubjectState()
{
Get {return this.action;}
Set {this.action = Value;}
}
}
Public class NBAObserver
{
Private string name;
Private Subject sub
Public NBAObserver(string name,Subject sub)
{
Name=name;
Sub=sub;
}
Public void CloseTV()
{
}
}
Main()
{
Boss b=new Boss();
//注意这里的事件模型 B.update updata是一个EventHandler的对象。
B.update+=new EventHandler(new NBAObserver("ddd",b).CloseTV());
b.sbujectState="i am coming ...";
b.Notify();
}
委托就是方法的引用!一个委托可以打在多个函数,所有的被一次唤起!注意前提:擦拭,返回值。
如果,一个对象的变化要通知别的对象,但是别的对象里要执行的方法名称不同,但是参数和返回值一样,就可以使用委托模式!