zoukankan      html  css  js  c++  java
  • 设计模式-门面(外观)模式

    一、定义

    要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行。门面模式提供一个高层次的接口,使得子系统更容易使用。

    二、类型

    结构型

    三、适用场景

    • 为一个复杂的模块或子系统提供一个供外部访问的接口。
    • 子系统相对独立,外界对子系统的访问只要黑盒操作即可。

    四、优点

    • 减少系统的相互依赖,子系统只提供一个指定接口,防止外界系统深入到子系统内部,减少耦合。
    • 提高灵活性,不管子系统内部如何变化,只要不影响门面对象,就没什么关系。
    • 提高安全性,外界只能访问指定的业务,不在门面上提供的业务,休想访问。

    五、缺点

    违背开闭原则,增加子系统和扩展子系统的时候容易引入风险。

    六、类图

     

    七、代码实现

    模块:

    package com.wms.createtype.facade;
    
    public class Product {
        public boolean checkStock(String product) {
            System.out.println("检查库存是否足够");
            return true;
        }
    }
    package com.wms.createtype.facade;
    
    public class Price {
        public double getPrice(String product) {
            System.out.println("获取产品价格");
            return 0;
        }
    }
    package com.wms.createtype.facade;
    
    public class ShippingAddress {
        public String getShippingAddress(String user) {
            System.out.println("查询客户的收货地址");
            return "xxx";
        }
    }

    门面类:

    package com.wms.createtype.facade;
    
    public class CreateOrderFacade {
    
        private Product product = new Product();
        private Price price = new Price();
        private ShippingAddress shippingAddress = new ShippingAddress();
    
        public void setProduct(Product product) {
            this.product = product;
        }
    
        public void setPrice(Price price) {
            this.price = price;
        }
    
        public void setShippingAddress(ShippingAddress shippingAddress) {
            this.shippingAddress = shippingAddress;
        }
    
        public void createOrder(String product, String user) {
            this.product.checkStock(product);
            this.price.getPrice(product);
            this.shippingAddress.getShippingAddress(user);
            System.out.println("创建订单成功");
        }
    }

    客户端:

    package com.wms.createtype.facade;
    
    public class TestDesignParttern {
        public static void main(String[] args) {
            CreateOrderFacade createOrderFacade = new CreateOrderFacade();
            createOrderFacade.createOrder("xxx", "ooo");
        }
    }

     

  • 相关阅读:
    认识与设计Serverless(二)
    认识与设计Serverless(一)
    log4j2动态修改日志级别及拓展性使用
    log4j2高级配置(1)
    log4j2介绍及配置
    Java 并发编程篇
    JAVA多线程之volatile 与 synchronized 的比较
    springboot分布式锁学习
    springboot2连接多数据库mysql+oracle
    Mysql的分页查询优化
  • 原文地址:https://www.cnblogs.com/wangmingshun/p/10226490.html
Copyright © 2011-2022 走看看