结构型-外观模式facade
2020-04-27 本文已影响0人
程序男保姆
- 定义
外观模式是典型的迪米特法则(最少知道原则)。是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。
- 优点
1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。
- 缺点
符合开闭原则,如果要改东西很麻烦,继承重写都不合适。比如此类中如果需要添加其他流程(物流发货后需要发送短信通知)facadeservice中就必须再添加流程。这样就不符合开闭原则了。解决办法是 结合 构建者模式+单利模式
类图
外观模式
/***
* 商品类
*/
public class Product {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/***
* 金币扣减
*/
public class JinBiService {
public void koujian(Product product){
System.out.println(product.getName()+"金币成功");
}
}
/***
* 校验优惠券
*/
public class YouHuiquanService {
public void jiaoyan(Product product){
System.out.println(product.getName()+"优惠券校验成功");
}
}
/***
* 物流发货
*/
public class FaHuoService {
public void fahuo(Product product){
System.out.println(product.getName()+"发货成功");
}
}
/***
* 外观模式 facade (佛撒的)
*
*
*/
public class FacadeProductService {
/**
* 1 本例没有依赖spring 依赖spring后 可以用spring的依赖注入
* 2 被依赖的service 一般为单例模式
**/
private YouHuiquanService youHuiquanService = new YouHuiquanService();
private JinBiService jinBiService = new JinBiService();
private FaHuoService faHuoService = new FaHuoService();
/***
* 提交订单
*/
public void submitProduct(Product product) {
youHuiquanService.jiaoyan(product);
jinBiService.koujian(product);
faHuoService.fahuo(product);
}
}
public class Test {
public static void main(String[] args) {
Product product = new Product();
product.setName("水杯");
FacadeProductService facadeProductService = new FacadeProductService();
facadeProductService.submitProduct(product);
}
}