外观模式
通过父系统调用子系统,也就是父系统是入口,调用不同的子系统,遵守迪米特法则,最少知道原则
优点:
简化调用过程,无需了解子系统,防止带来风险
减少系统依赖,减少系统耦合性
生活中的例子:
例如我在CF官网,我用积分兑换,装备,我只需要知道我能兑换装备,我不需要他具体执行的什么,具体能不能到我的账号,内部验证积分是否充足,然后减抠积分,然后通过虚拟装备系统发放到某个人的账户
装备
public class Equipment {
private String name;
public Equipment(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
支付
public class PointsPaymentService {
public boolean pay(Equipment equipment){
//扣减积分
System.out.println("支付"+ equipment.getName()+" 积分成功");
return true;
}
}
验证积分资格
public class QualifyService {
public boolean isAvailable(Equipment equipment){
System.out.println("校验"+ equipment.getName()+" 积分资格通过,库存通过");
return true;
}
}
发货系统
public class ShippingService {
public String shipGift(Equipment equipment){
//物流系统的对接逻辑
System.out.println(equipment.getName()+"进入虚拟装备系统");
String shippingOrderNo = "666";
return shippingOrderNo;
}
}
程序的业务
public class EquipmentExchangeService {
private QualifyService qualifyService = new QualifyService();
private PointsPaymentService pointsPaymentService = new PointsPaymentService();
private ShippingService shippingService = new ShippingService();
public void giftExchange(Equipment equipment){
if(qualifyService.isAvailable(equipment)){
//资格校验通过
if(pointsPaymentService.pay(equipment)){
//如果支付积分成功
String shippingOrderNo = shippingService.shipGift(equipment);
System.out.println("虚拟系统下单成功,订单号是:"+shippingOrderNo);
}
}
}
}
Equipment equipment = new Equipment("火麒麟");
EquipmentExchangeService equipmentExchangeService = new EquipmentExchangeService();
equipmentExchangeService.giftExchange(equipment);
结果:
校验火麒麟 积分资格通过,库存通过
支付火麒麟 积分成功
火麒麟进入虚拟装备系统
虚拟系统下单成功,订单号是:666
所以说,我不需要知道他的流程,我只需要知道我要兑换东西,就好了