序
小梅到新公司报到。被通知需要先去人力资源部找A老师签订合同,然后去综合部找B老师领取办公用品,最后去所属部门C老师处报到。公司这么大,人员这么多,人力资源部在哪?谁是A老师?综合部怎么走?B老师长什么样?新部门XX层的电梯左边还是右边?C老师座位在哪? 哇,Facade模式,快出来帮我们的新员工解决问题了。
Facade模式的功能:
为一个复杂系统提供一个简单接口
-
提高子系统的独立性
Facade类通常是只存在一个实体的单例类(非必须)。
实现
人力资源部:
public class HRDepartment
{
public void report()
{
System.out.println("report in human resource department");
// 签订合同等其他
}
}
综合部门:
public class GeneralDepartment
{
public void report()
{
System.out.println("report in general department");
// 领取办公用品等其他
}
}
工作部门:
public class WorkingDepartment
{
public void report()
{
System.out.println("report in working department");
// 认识新同事等其他。
}
}
Facade类:
public class StaffInductionFacade
{
// 单例
private StaffInductionFacade() {}
private static StaffInductionFacade instance = null;
private HRDepartment hrDept = new HRDepartment();
private GeneralDepartment genDept = new GeneralDepartment();
private WorkingDepartment workingDept = new WorkingDepartment();
public static StaffInductionFacade getInstance()
{
if (instance == null)
{
instance = new StaffInductionFacade();
}
return instance;
}
public void report()
{
hrDept.report();
genDept.report();
workingDept.report();
}
}
测试Demo:
public class StaffFirstDayDemo
{
public static void main(String[] args)
{
StaffInductionFacade staffFacade = StaffInductionFacade.getInstance(); staffFacade.report();
}
}
本例中,因为几个子系统(人力资源部,综合部门,工作部门)实现的太简单了,所以对比下,Facade类就稍显复杂。实际应用中,几个子系统类是比较复杂的。