以下单摘果为案例,客户下单后产生了一系列的动作:采摘 -> 商品包装 -> 物流送货
根据上图流程,每下一个订单都需要经过三个步骤,如果每一个订单都需要关注三个组件服务的使用细节,那会使用的风险。因此需要糅合功能,对外只提供一个入口。
- 调用方只关注facade组件,不需要知道底层服务;
- 隐藏掉底层服务中不想干的功能
代码逻辑如下:
//分别新建采摘、打包、快递三个服务类
public class PickService {
public void doPick() {
System.out.println("采摘水果");
}
}
public class PackageService {
public void doPack() {
System.out.println("商品打包装");
}
}
public class SendService {
public void doSend() {
System.out.println("水果快递发货");
}
}
//对外提供一个公共接口
public class OrderFacade {
private PickService pickService;
private PackageService packageService;
private SendService sendService;
public OrderFacade() {
this.pickService = new PickService();
this.packageService = new PackageService();
this.sendService = new SendService();
}
/**
* 客户处理订单类
*/
public void doOrder() {
pickService.doPick();
packageService.doPack();
sendService.doSend();
}
}
//外观模式测试
public class CustomerClient {
public static void main(String[] args) {
OrderFacade order = new OrderFacade();
order.doOrder();
}
}