结构型-外观模式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);
    }
}

上一篇下一篇

猜你喜欢

热点阅读