门面模式将多个不同的子系统的接口封装起来,并对外提供统一的接口,使复杂的子系统变得更容易使用
用户吃饭,需要先去找菜贩买菜,再找人做饭,最后吃饭并洗碗
// 菜贩
public class VegVendor {
public void purchase(){
System.out.println("买菜");
}
}
public class Helper {
public void cook(){
System.out.println("烹饪");
}
}
public class Client {
public void eat(){
System.out.println("吃饭");
}
public void wash(){
System.out.println("洗碗");
}
public static void main(String[] args) {
// 买菜
new VegVendor().purchase();
// 找人烧饭
new Helper().cook();
// 吃饭
Client client = new Client();
client.eat();
client.wash();
}
}
为了高效,门店会统一对子系统的整合与调度
public class Facade {
private VegVendor vegVendor;
private Chef chef;
private Waiter waiter;
private Cleaner cleaner;
public Facade(){
this.vegVendor = new VegVendor();
// 买菜
vegVendor.purchase();
// 对下面的子系统进行整合
// 雇佣厨师
this.chef = new Chef();
// 雇佣服务员
this.waiter = new Waiter();
// 雇佣清洁工
this.cleaner = new Cleaner();
}
// 点菜
public void order(){
waiter.order();
chef.cook();
waiter.serve();
cleaner.clean();
cleaner.wash();
}
}
此时用户只需要调用order()方法即可,极大的保证了用户访问的便利性
门面模式解决的问题:软件模块应该只专注于各自擅长的领域,合理明确的分工模式才能更好的整合与共享资源
门面模式:封装了多个子系统,并将它们整合起来对外提供统一的访问接口
总结
多个子系统隐藏在门面里,对外不可见,门面充当了包装类的角色,对子系统进行整合,再对外暴露统一的接口,降低了客户端与子系统之间的耦合度