天天看点

设计模式第八篇-外观模式

作者:java研习社
设计模式第八篇-外观模式

一、引言

电商项目中一个常见场景:提交订单操作,提交订单后有很多后续动作,例如:检查订单, 创建订单, 减库存,创建支付链接等等,这些子类的内部操作都很复杂。如果我们的客户端程序要直接跟这些内容子系统进行耦合,那么客户端就得随着子系统的改动而改动。提交订单操作在一个电商系统中很多地方都会出现,如果每个地方都进行了耦合,那一旦进行改动是非常苦难的。

这个时候我们需要一个高级接口,将子系统包装起来,提供一个客户端可以访问系统的接口,将内部系统的复杂性隐藏起来,这就是外观模式。

二、外观模式

定义:外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。

主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。

何时使用: 1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。 2、定义系统的入口。

如何解决:客户端不与系统耦合,外观类与系统耦合。

类图:

设计模式第八篇-外观模式

三、代码实现

//检查订单
public class CheckOrder {
    public void check() {
        System.out.println("检查订单...");
    }
}
//创建订单
public class AddOrder {
    public void add(){
        System.out.println("新增订单...");
    }
}
//减库存
public class SubInventory {
    public void sub(){
        System.out.println("减去库存...");
    }
}
//下单外观类
public class OrderFacade {
    private AddOrder addOrder;
    private CheckOrder checkOrder;
    private SubInventory subInventory;

    public OrderFacade(){
        addOrder=new AddOrder();
        checkOrder=new CheckOrder();
        subInventory=new SubInventory();
    }
    //入口方法
    public void order(){
        checkOrder.check();
        addOrder.add();
        subInventory.sub();
    }
}           

结果:

设计模式第八篇-外观模式

四、总结

优点: 1、减少系统相互依赖。 2、提高灵活性。 3、提高了安全性。

缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。

使用场景: 1、为复杂的模块或子系统提供外界访问的模块。 2、子系统相对独立。 3、预防低水平人员带来的风险。

注意事项:在层次化结构中,可以使用外观模式定义系统中每一层的入口

为帮助开发者们提升面试技能、有机会入职BATJ等大厂公司,特别制作了这个专辑——这一次整体放出。

大致内容包括了: Java 集合、JVM、多线程、并发编程、设计模式、Spring全家桶、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat等大厂面试题等、等技术栈!

设计模式第八篇-外观模式

欢迎大家关注头条【java研习社】,回复【111】,获取以上最新Java后端架构VIP学习资料以及视频学习教程,然后一起学习,一文在手,面试我有。

每一个专栏都是大家非常关心,和非常有价值的话题,如果我的文章对你有所帮助,还请帮忙点赞、好评、转发一下,你的支持会激励我输出更高质量的文章,非常感谢!

设计模式第八篇-外观模式
设计模式第八篇-外观模式

继续阅读