外观模式:又叫做门面模式,通过为多个子系统提供统一的接口,通过统一的接口访问子系统的模式。外部系统无需关注内部系统的实现逻辑。对外来说,降低了系统的复杂性。
举个例子:
假设公司要上马一个新项目,但是新项目比较特殊,涉及到公司的多个部分,营销部,后勤部,法务部等等,需要他们通力合作才能完成,领导就成立了一个临时的项目组,从各个部分抽调人手过来。那么项目开始运行的时候,公司外部的客户需要接触这个项目的时候就直接找这个临时的项目组,如果需要和其他部门交流,那就由这个项目组去协调,而对于公司的客户来说,就简单多了。
用代码实现一下:
各个子系统:
// 营销部
public class YingxiaoBu {
public void xuanchuan(){
System.out.println("打个广告");
}
}
// 财务部
public class CaiwuBu {
public void yusuan(){
System.out.println("批个预算");
}
}
// 后勤部
public class HouqinBu {
public void zhunbei(){
System.out.println("材料准备好");
}
}
外观(门面):
public class ProjectFacade {
private YingxiaoBu yingxiaoBu = new YingxiaoBu();
private CaiwuBu caiwuBu = new CaiwuBu();
private HouqinBu houqinBu = new HouqinBu();
// 把各个子系统的功能进行组合以完成特定的任务
public void project(){
System.out.println("项目开始");
yingxiaoBu.xuanchuan();
caiwuBu.yusuan();
houqinBu.zhunbei();
System.out.println("项目结束");
}
}
测试:
public class Client {
public static void main(String[] args) {
ProjectFacade projectFacade = new ProjectFacade();
projectFacade.project();
}
}
小结一下:外观模式是对迪米特法则的具体的实现。其实这种方式在项目的实际开发中应该是有不少使用的。通常我们的项目会有若干个功能相对独立的子模块,而有些功能就是需要这些子模块的部分功能组合来完成,我们就会在一个类中组合子系统,然后来完成特定的功能。