单派与多派

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


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

最新文章

  1. SaaS模式的软件
  2. svn清除已保存的用户名和密码
  3. Java和C/C++进行DES/AES密文传输(借鉴)
  4. 结巴分词标注兼容_ICTCLAS2008汉语词性标注集
  5. eclipse配置tomcat加大内存的方法
  6. 前端--json数据的处理及相关兼容问题
  7. mongodb or操作与连接池
  8. 似是而非的JS - 异步调用可以转化为同步调用吗?
  9. Web安全学习笔记(一)
  10. 二:熟悉 TCP/IP 协议
  11. MT【296】必要性探路
  12. 【2.0】SpringBoot多环境yml文件配置
  13. linux中没有tree命令,command not found,解决办法
  14. .NET Core 环境下使用命令行移除某个 nuget 包的具体方法
  15. 遍历目录删除指定MD5值的文件
  16. tracert
  17. python pytest测试框架介绍二
  18. 得到scp命令的完整路径
  19. IDF实验室-简单的js解密
  20. 解决SurfaceView调用setZOrderOnTop(true)遮挡其他控件

热门文章

  1. Java设计模式の单例模式
  2. How to Disable System Integrity Protection (rootless) in OS X El Capitan
  3. mysql 中 group_concat()用法
  4. 51Nod 1050 循环数组最大子段和 | DP
  5. LightOJ 1085 - All Possible Increasing Subsequences 树状数组+离散
  6. [Luogu 2221] HAOI2012 高速公路
  7. Activity与Service的回收
  8. noip2012~2015刷题小记录
  9. iOS开发者两分钟学会用GitHub在Mac上托管代码的两种方法
  10. jQuery右侧悬浮楼层滚动 电梯菜单