设计模式-外观模式
外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。
应用实例: 1、去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。 2、JAVA 的三层开发模式。
优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。
缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
使用场景: 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。
注意事项:在层次化结构中,可以使用外观模式定义系统中每一层的入口。
JAVA应用:
org.springframework.jdbc.suppor.JdbcUtils
org.apache.ibatis.session.Configuration
public class QualifyService { public boolean isAvailable(PointsGift pointsGift){ System.out.println("校验"+pointsGift.getName()+" 积分资格通过,库存通过"); return true; } }
public class PointsPaymentService { public boolean pay(PointsGift pointsGift){ //扣减积分 System.out.println("支付"+pointsGift.getName()+" 积分成功"); return true; } }
public class ShippingService { public String shipGift(PointsGift pointsGift){ //物流系统的对接逻辑 System.out.println(pointsGift.getName()+"进入物流系统"); String shippingOrderNo = "666"; return shippingOrderNo; } }
public class GiftExchangeService { private QualifyService qualifyService = new QualifyService(); private PointsPaymentService pointsPaymentService = new PointsPaymentService(); private ShippingService shippingService = new ShippingService(); public void giftExchange(PointsGift pointsGift){ if(qualifyService.isAvailable(pointsGift)){ //资格校验通过 if(pointsPaymentService.pay(pointsGift)){ //如果支付积分成功 String shippingOrderNo = shippingService.shipGift(pointsGift); System.out.println("物流系统下单成功,订单号是:"+shippingOrderNo); } } } }