• 派(Dispatch)


    单派与多派

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

     

    
    			

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

    浮沙之上勿筑高台
  • 相关阅读:
    DP -- 递推
    二分查找题
    动态规划
    二分专题
    并查集
    三分法
    二分法
    插入排序
    排序小结
    Go go.mod入门
  • 原文地址:https://www.cnblogs.com/stst/p/4901719.html
Copyright © 2020-2023  润新知