1. 定义
提供一个统一的接口,用来访问子系统中的一群接口,这个高层接口使得子系统更容易使用。
2. 角色
- Facade:外观类
- SubSystem:子系统类
3. 特点
- 优点:实现了客户和子系统的松耦合关系,客户通过外观类来对子系统进行操作,因此子系统内部的修改不会影响客户的使用。
- 缺点:该模式对客户访问子系统类增加了许多限制,降低了系统的灵活性,当增加子系统时,可能需要修改外观类和客户的源代码,违反了开闭原则。
4. 示例
Restaurant:
public class Restaurant {
private Waiter waiter;
private Cooker cooker;
private Cashier cashier;
public Restaurant() {
waiter = new Waiter();
cooker = new Cooker();
cashier = new Cashier();
}
public void doWork() {
waiter.doWork();
cooker.doWork();
cashier.doWork();
}
}
Waiter:
public class Waiter {
public void doWork() {
System.out.println("点餐");
}
}
Cooker:
public class Cooker {
public void doWork() {
System.out.println("烹饪中");
}
}
Cashier:
public class Cashier {
public void doWork() {
System.out.println("结账");
}
}
测试类:
public class TestFacade {
public static void main(String[] args) {
Restaurant restaurant = new Restaurant();
restaurant.doWork();
}
}
// 输出
// 点餐
// 烹饪中
// 结账
参考:
1. 《Head First 设计模式》
2. 《图说设计模式》https://design-patterns.readthedocs.io/zh_CN/latest/structural_patterns/facade.html