1700472481
}
1700472482
1700472483
员工和经理层的信息就不再展示了,请参考代码清单25-6。程序还是比较简单的,分别计算普通员工和经理级员工的工资总和,然后加起来。注意,我们在实现时已经考虑员工工资和经理工资的系数不同。
1700472484
1700472485
我们再来看Client类的模拟,如代码清单25-19所示。
1700472486
1700472487
代码清单25-19 场景类
1700472488
1700472489
public class Client{
1700472490
1700472491
public static void main(String[]args){
1700472492
1700472493
IVisitor visitor=new Visitor();
1700472494
1700472495
for(Employee emp:mockEmployee()){
1700472496
1700472497
emp.accept(visitor);
1700472498
1700472499
}
1700472500
1700472501
System.out.println(“本公司的月工资总额是:”+visitor.getTotalSalary());
1700472502
1700472503
}
1700472504
1700472505
}
1700472506
1700472507
其中mockEmployee静态方法没有任何改动,请参考代码清单25-10,在此不再赘述。运行结果如下所示:
1700472508
1700472509
姓名:张三 性别:男 薪水:1800 工作:编写Java程序,绝对的蓝领、苦工加搬运工
1700472510
1700472511
姓名:李四 性别:女 薪水:1900 工作:页面美工,审美素质太不流行了!
1700472512
1700472513
姓名:王五 性别:男 薪水:18750 业绩:基本上是负值,但是我会拍马屁呀
1700472514
1700472515
本公司的月工资总额是:101150
1700472516
1700472517
然后你想修改工资的系数,没有问题!想换个展示格式,也没有问题!多多练习吧,这都是非常简单的。
1700472518
1700472519
1700472520
1700472521
1700472522
设计模式之禅 25.4.2 多个访问者
1700472523
1700472524
在实际的项目中,一个对象,多个访问者的情况非常多。其实我们上面例子就应该是两个访问者,为什么呢?报表分两种:第一种是展示表,通过数据库查询,把结果展示出来,这个就类似于我们的那个列表;第二种是汇总表,这个是需要通过模型或者公式计算出来的,一般都是批处理结果,这个类似于我们计算工资总额,这两种报表格式是对同一堆数据的两种处理方式。从程序上看,一个类就有个不同的访问者了。修改一下类图,如图25-7所示。
1700472525
1700472526
1700472527
1700472528
1700472529
图25-7 多访问者的类图
1700472530
[
上一页 ]
[ :1.700472481e+09 ]
[
下一页 ]