定义
- 又叫门面模式,提供了一个统一的接口,用来访问子系统中的一群借口
- 外观模式定义了一个高层接口,让子系统更容易使用
类型
结构型
优点
- 简化了调用过程,无需了解深入子系统,防止带来风险
- 减少系统以来、松散耦合
- 更好的划分访问层次
- 符合迪米特法则,即最少知道原则
缺点
- 增加子系统、扩展子系统行为容易引入风险
- 不符合开闭原则
Coding
public class Test {
// 兑换礼品流程
public static void main(String[] args) {
PointGift pointGift = new PointGift();
QualifyService qualifyService = new QualifyService();
// 检查积分是否够用
if (qualifyService.isAvailable(pointGift)){
PointPaymentService pointPaymentService = new PointPaymentService();
// 支付积分
if (pointPaymentService.pay(pointGift)){
ShippingService shippingService = new ShippingService();
// 对接物流系统发出礼物
String shippingOrderNo = shippingService.shipGift(pointGift);
}
}
}
}
此时的类图是这样的:
客户端直接依赖于每个子系统。
下面在看看门面模式:
// 新加类
public class GiftExchangeService {
private QualifyService qualifyService = new QualifyService();
private PointPaymentService pointPaymentService = new PointPaymentService();
private ShippingService shippingService = new ShippingService();
public String giftExchange(PointGift pointGift) {
// 检查积分是否够用
if (qualifyService.isAvailable(pointGift)) {
// 支付积分
if (pointPaymentService.pay(pointGift)) {
// 对接物流系统发出礼物
return shippingService.shipGift(pointGift);
}
}
return null;
}
}
// 客户端
public class Test {
// 兑换礼品流程
public static void main(String[] args) {
PointGift pointGift = new PointGift();
GiftExchangeService giftExchangeService = new GiftExchangeService();
giftExchangeService.giftExchange(pointGift);
}
}
此时类图是这样的:
客户端直接调用门面提供的接口就行,而不用在关心具体的子系统。
如果帮到你了,请点击右上角给个赞吧!!
学习笔记。内容总结于Geely老师的《Java设计模式精讲 》
欢迎访问我的博客: 他和她的猫