打字猴:1.700471834e+09
1700471834
1700471835
1700471836 图25-3 改造后的简化类图
1700471837
1700471838 两个子类的report方法都不需要了,只有Visitor类来实现了report的方法,这个猛一看还真有点委托(intergration)的意味,我们实现出来你就知道这和委托有非常大的差距。详细类图如图25-4所示。
1700471839
1700471840
1700471841
1700471842
1700471843 图25-4 改造后的详细类图
1700471844
1700471845 在抽象类Employee中增加了accept方法,该方法是一个抽象方法,由子类实现,其意义就是说我这个类可以允许谁来访问,也就是定义一类访问者,在具体的实现类中调用访问者的方法。我们先看访问者接口IVisitor程序,如代码清单25-5所示。
1700471846
1700471847 代码清单25-5 访问者接口
1700471848
1700471849 public interface IVisitor{
1700471850
1700471851 //首先,定义我可以访问普通员工
1700471852
1700471853 public void visit(CommonEmployee commonEmployee);
1700471854
1700471855 //其次,定义我还可以访问部门经理
1700471856
1700471857 public void visit(Manager manager);
1700471858
1700471859 }
1700471860
1700471861 该接口的意义是:该接口可以访问两个对象,一个是普通员工,一个是高层员工。我们来看其具体实现类,如代码清单25-6所示。
1700471862
1700471863 代码清单25-6 访问者实现
1700471864
1700471865 public class Visitor implements IVisitor{
1700471866
1700471867 //访问普通员工,打印出报表
1700471868
1700471869 public void visit(CommonEmployee commonEmployee){
1700471870
1700471871 System.out.println(this.getCommonEmployee(commonEmployee));
1700471872
1700471873 }
1700471874
1700471875 //访问部门经理,打印出报表
1700471876
1700471877 public void visit(Manager manager){
1700471878
1700471879 System.out.println(this.getManagerInfo(manager));
1700471880
1700471881 }
1700471882
1700471883 //组装出基本信息
[ 上一页 ]  [ :1.700471834e+09 ]  [ 下一页 ]