1700480250
}
1700480251
1700480252
这里只是对前面的元素值做了一个加减法计算,这是对实际HR系统的简化处理,如果把这个类暴露给外系统,那么被修改的风险是非常大的,因为它的方法totalSalary是一个具体的业务逻辑。我们采用门面模式的目的是要求门面是无逻辑的,与业务无关,只是一个子系统的访问入口。门面模式只是一个技术层次上的实现,全部业务还是在子系统内实现。我们来看HR门面,如代码清单33-27所示。
1700480253
1700480254
代码清单33-27 HR门面
1700480255
1700480256
public class HRFacade{
1700480257
1700480258
//总工资情况
1700480259
1700480260
private SalaryProvider salaryProvider=new SalaryProvider();
1700480261
1700480262
//考勤情况
1700480263
1700480264
private Attendance attendance=new Attendance();
1700480265
1700480266
//查询一个人的总收入
1700480267
1700480268
public int querySalary(String name,Date date){
1700480269
1700480270
return salaryProvider.totalSalary();
1700480271
1700480272
}
1700480273
1700480274
//查询一个员工一个月工作了多少天
1700480275
1700480276
public int queryWorkDays(String name){
1700480277
1700480278
return attendance.getWorkDays();
1700480279
1700480280
}
1700480281
1700480282
}
1700480283
1700480284
所有的行为都是委托行为,由具体的子系统实现,门面只是提供了一个统一访问的基础而已,不做任何的校验、判断、异常等处理。我们编写一个场景类查看运行结果,如代码清单33-28所示。
1700480285
1700480286
代码清单33-28 场景类
1700480287
1700480288
public class Client{
1700480289
1700480290
public static void main(String[]args){
1700480291
1700480292
//定义门面
1700480293
1700480294
HRFacade facade=new HRFacade();
1700480295
1700480296
System.out.println(”===外系统查询总收入===”);
1700480297
1700480298
int salary=facade.querySalary(“张三”,new Date(System.
1700480299
[
上一页 ]
[ :1.70048025e+09 ]
[
下一页 ]