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 ]
[
下一页 ]