码迷,mamicode.com
首页 > 其他好文 > 详细

派(Dispatch)

时间:2015-10-22 19:01:38      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

单派与多派

(Single Dispatch and Multi Dispatch)

    "检查一个数据项的类型,并据此去调用某个适当的过程称为基于类型的分派"。

    上面是来自《计算机程序的解释与构造》的一段话,今日有幸读到。对于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);

 

技术分享


			

    我能想到的应用也只有双派,是否有更多的派,我就不了解了。

派(Dispatch)

标签:

原文地址:http://www.cnblogs.com/stst/p/4901719.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!