您的位置:首页 > 其它

派(Dispatch)

2015-10-22 17:32 183 查看
[b]单派与多派 [/b](Single Dispatch and Multi Dispatch)[b]"检查一个数据项的类型,并据此去调用某个适当的过程称为基于类型的分派"。 [/b]上面是来自《计算机程序的解释与构造》的一段话,今日有幸读到。对于Dispatch这个词,我第一次接触,是来自Com/DCom年代的自动化接口(IDispatcher),然后一直就很朦胧,知道那么会事,但是没有一个清晰的认识。OOP中的多态就属于典型的单分派,对一个多态方法的调用是通过对象的实际类型确定的。对于如下代码调用:IObj a = new ObjA();IObj b = new ObjB();IObj c = new ObjC();a.Func();b.Func();c.Func();虽然同样是对Func的调用,但是其分别"检查了a,b,c的实际类型,并据此去调用某个对应的方法",为什么是叫单派,因为参与确定方法的因素只有一个,就是类型。确定具体方法的只需要查询这个一维表格,而双派的典型应用就是设计模式中的访问者模式。下面是一个典型的访问模式的结构图:访问者模式要确定调用哪个方法,需要有两个维度来确定,一个维度是结构,包含ObjA,ObjB,ObjC,一个维度是行为,包括VisA,VisB,VisC。如下调用:
IObj obj = new ObjB();
IVis func = new VisB();
obj.Accept(func);
如上表格,确定最后调用哪个方法,有两个维度决定调用VisB::Do(ObjB),同理,如下调用:
IObj obj = new ObjC();
IVis func = new VisA();
obj.Accept(func);
我能想到的应用也只有双派,是否有更多的派,我就不了解了。
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: