1700472710
1700472711
1700472712
设计模式之禅 25.4.3 双分派
1700472713
1700472714
说到访问者模式就不得不提一下双分派(double dispatch)问题,什么是双分派呢?我们先来解释一下什么是单分派(single dispatch)和多分派(multiple dispatch),单分派语言处理一个操作是根据请求者的名称和接收到的参数决定的,在Java中有静态绑定和动态绑定之说,它的实现是依据重载(overload)和覆写(override)实现的,我们来说一个简单的例子。
1700472715
1700472716
例如,演员演电影角色,一个演员可以扮演多个角色,我们先定义一个影视中的两个角色:功夫主角和白痴配角,如代码清单25-25所示。
1700472717
1700472718
代码清单25-25 角色接口及实现类
1700472719
1700472720
public interface Role{
1700472721
1700472722
//演员要扮演的角色
1700472723
1700472724
}
1700472725
1700472726
public class KungFuRole implements Role{
1700472727
1700472728
//武功天下第一的角色
1700472729
1700472730
}
1700472731
1700472732
public class IdiotRole implements Role{
1700472733
1700472734
//一个弱智角色
1700472735
1700472736
}
1700472737
1700472738
角色有了,我们再定义一个演员抽象类,如代码清单25-26所示。
1700472739
1700472740
代码清单25-26 抽象演员
1700472741
1700472742
public abstract class AbsActor{
1700472743
1700472744
//演员都能够演一个角色
1700472745
1700472746
public void act(Role role){
1700472747
1700472748
System.out.println(“演员可以扮演任何角色”);
1700472749
1700472750
}
1700472751
1700472752
//可以演功夫戏
1700472753
1700472754
public void act(KungFuRole role){
1700472755
1700472756
System.out.println(“演员都可以演功夫角色”);
1700472757
1700472758
}
1700472759
[
上一页 ]
[ :1.70047271e+09 ]
[
下一页 ]