打字猴:1.700472817e+09
1700472817
1700472818 演员可以扮演任何角色
1700472819
1700472820 年龄大了,不能演功夫角色
1700472821
1700472822 重载在编译器期就决定了要调用哪个方法,它是根据role的表面类型而决定调用act(Role role)方法,这是静态绑定;而Actor的执行方法act则是由其实际类型决定的,这是动态绑定。
1700472823
1700472824 一个演员可以扮演很多角色,我们的系统要适应这种变化,也就是根据演员、角色两个对象类型,完成不同的操作任务,该如何实现呢?很简单,我们让访问者模式上场就可以解决该问题,只要把角色类稍稍修改即可,如代码清单25-29所示。
1700472825
1700472826 代码清单25-29 引入访问者模式
1700472827
1700472828 public interface Role{
1700472829
1700472830 //演员要扮演的角色
1700472831
1700472832 public void accept(AbsActor actor);
1700472833
1700472834 }
1700472835
1700472836 public class KungFuRole implements Role{
1700472837
1700472838 //武功天下第一的角色
1700472839
1700472840 public void accept(AbsActor actor){
1700472841
1700472842 actor.act(this);
1700472843
1700472844 }
1700472845
1700472846 }
1700472847
1700472848 public class IdiotRole implements Role{
1700472849
1700472850 //一个弱智角色,由谁来扮演
1700472851
1700472852 public void accept(AbsActor actor){
1700472853
1700472854 actor.act(this);
1700472855
1700472856 }
1700472857
1700472858 }
1700472859
1700472860 场景类稍有改动,如代码清单25-30所示。
1700472861
1700472862 代码清单25-30 场景类
1700472863
1700472864 public class Client{
1700472865
1700472866 public static void main(String[]args){
[ 上一页 ]  [ :1.700472817e+09 ]  [ 下一页 ]