首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

多路散发

2012-09-24 
多路分发?多路分发?Number.plus(Number)?Number是各种数字对象的超类。 当声明a.plus(b)时,并不知道a,b的确

多路分发

?多路分发

?

Number.plus(Number)

?

Number是各种数字对象的超类。 当声明a.plus(b)时,并不知道a,b的确切类型。

如何正确地交互?

Java只支持单路分发,如果要执行的操作包含了不止一个类型未知的对象时,

那么Java的动态绑定机制只能处理其中一个的类型。所以必须自己来判定其他的

类型,从而实现自己的动态绑定行为。

?

解决的办法就是多路分发,如果想使用2路分发,那么必须有2个方法调用,

第一个方法调用决定第一个未知类型,第二个方法调用决定第二个未知类型。

所以必须为每一个类型提供给一个实际的方法调用

?

一般而言,需要有设定好的某种配置,以便一个方法调用能够引出更多的方法

调用,从而能够在这个过程中处理多种类型。

?

为了达到这种效果,我们需要与多个方法一同工作: 因为每个分发都需要一个

方法调用。

?

下面剪刀 石头 布 游戏对应的方法是compete()和eval(),二者都是同一个类型

的成员, 可以产生三种Outcome实例中的一个作为结果。



??Item是这几种类型的接口, 用作多路分发。 RoshamBol.match()有2个item参数,?通关过Item.compete()方法开始2路分发,要判定a的类型,分发机制会在a的实际?类型的compete()内部起到分发作用。compete()方法通关过eval()来为另一个类型?实现第二次分发, 将自身(this)作为参数调用eval(),能够调用重载过的eval()?方法,这能够保留第一次分发的类型信息,第二次分发完成时,就能知道两个Item?对象的具体类型了。 

热点排行