1. 概述
2. 代码解析
/**
* 商品
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PointGift {
private String name;
}
/**
* 验证商品服务
*/
public class QualifyService {
public boolean isAvailable(PointGift gift) {
if (gift != null) {
System.out.println("验证通过: " + gift.getName());
return true;
}
return false;
}
}
/**
* 购买商品服务.
*/
public class ShippingService {
public boolean shipGift(PointGift gift) {
System.out.println("购买商品: " + gift.getName());
return true;
}
}
/**
* 支付商品服务.
*/
public class PayService {
public boolean pay(PointGift gift) {
System.out.println("支付商品: " + gift.getName());
return true;
}
}
/**
* 商品门面模式服务
*/
public class GiftFacadeService {
private PayService payService = new PayService();
private QualifyService qualifyService = new QualifyService();
private ShippingService shippingService = new ShippingService();
public void exchange(PointGift pointGift) {
if (qualifyService.isAvailable(pointGift)) {
// 验证商品成功
if (shippingService.shipGift(pointGift)) {
// 购买成功
if (payService.pay(pointGift)) {
// 支付成功
System.out.println("完整商品购买流程!");
}
}
}
}
}
/**
* 门面模式:
* 1. 封装好细节, 用户只需要调用门面模式, 就可以完成任务.
* 2. 调用方不涉及底层的服务以及服务之间调用的顺序.
* 3. 调用方只关心最后的结果, 而不需要关心调用的顺序以及各种服务的搭配使用.
*/
public class FacadeTest {
public static void main(String[] args) {
GiftFacadeService exchangeService = new GiftFacadeService();
exchangeService.exchange(new PointGift("衬衫"));
}
}