美文网首页
结构型-外观模式facade

结构型-外观模式facade

作者: 程序男保姆 | 来源:发表于2020-04-27 10:30 被阅读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);
        }
    }
    
    

    相关文章

      网友评论

          本文标题:结构型-外观模式facade

          本文链接:https://www.haomeiwen.com/subject/auoewhtx.html