• 设计模式-外观模式


    外观模式

    外观模式(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);
                }
            }
        }
    
    }
  • 相关阅读:
    volatile 能使得一个非原子操作变成原子操作吗?
    什么是线程局部变量?
    使用idea插件进行java代码生成
    mybatis plus+dynamic事务导致多数据源切换失败
    10_docker-compose
    Ubuntu的Python从2.x升级到3.x
    idea查看控制台数据mybatis的sql完整语句
    iframe高度处理
    angular路由
    去掉iPhone、iPad的默认按钮、输入框样式
  • 原文地址:https://www.cnblogs.com/woodpecker-z/p/14653220.html
Copyright © 2020-2023  润新知