多路分发:
当你处理多种交互类型时,程序可能会变得相当杂乱。举例来说,如果一个系统要分析
和执行数学表达式。我们可能会声明Number.plus(Number)、Number.mulitple(Number)等等,
你必须自己来判断其他的类型,从而实现自己的动态绑定行为。
解决上面问题的办法就是多路分发。多态只能发生在方法调用时,所以,如果你想使用两路分发,那么就必须有两个
方法调用:
第一个方法调用决定第二个未知类型,第二个方法调用决定第二个未知类型。
要利用多路分发,程序员必须为每一个类型提供一个实际的方法调用,如果你要处理两个不同的类型体系,就需要
为每个类型体系执行一个方法调用。
一般而言,程序员需要由设定好的某种配置,以便一个方法调用能够引出更多的方法调用,从而能够在这个过程中
处理多种类型。
当你处理多种交互类型时,程序可能会变得相当杂乱。举例来说,如果一个系统要分析
和执行数学表达式。我们可能会声明Number.plus(Number)、Number.mulitple(Number)等等,
其中Number是各种数字对象的超类。然而,当你声明a.plus(b)时,你并不知道a或者b的确切类型,那你如何能让它们正确交互呢?
你可能从未思考过这个问题的答案。Java只支持单路分发。也就是说,如果要执行的操作包含了不止一个类型
未知的对象时,那么Java的动态绑定机制只能处理其中一个的类型。这就无法解决我们上面提到的问题。所以,你必须自己来判断其他的类型,从而实现自己的动态绑定行为。
解决上面问题的办法就是多路分发。多态只能发生在方法调用时,所以,如果你想使用两路分发,那么就必须有两个
方法调用:
第一个方法调用决定第二个未知类型,第二个方法调用决定第二个未知类型。
要利用多路分发,程序员必须为每一个类型提供一个实际的方法调用,如果你要处理两个不同的类型体系,就需要
为每个类型体系执行一个方法调用。
一般而言,程序员需要由设定好的某种配置,以便一个方法调用能够引出更多的方法调用,从而能够在这个过程中
处理多种类型。
为了达到这种效果,我们需要与多个方法一同工作:因为每个分发都需要一个方法调用。
下面使用多种方法实现了石头、剪刀 、布 游戏,其中就使用了enum分发机制
猜拳第一种实现:
package com.zghw.base.enumx;
import static com.zghw.base.enumx.Outcome.*;
impo