设计模式之门面模式

       作过电商系统的小伙伴应该知道,用户购买一个东西以后,系统须要作的操做包括支付收费 、生成订单,扣除库存等几个操做。若是不使用门面模式那是怎样的呢?那咱们得分别为支付收费、生成订单,扣除库存这几个动做提供接口,让用户一个一个去调。使用门面模式就是咱们提供一个统一的接口,咱们来处理这几个动做,用户只要知道调了这个接口就能下单,购买到东西,并不须要去了解其中完成多少个步骤,有多少个子系统参与。编程

       这么一说,你是否是已经一直在使用门面模式,只是你本身并无意识到你在使用它?虽然简单,也一直已经在使用,仍是有必要探究一下它的细节以及注意点。安全

1、定义

定义(百度百科):门面模式,是指提供一个统一的接口访问多个子系统的多个不一样的接口,它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。
bash

这个定义能够说是很是清晰了,基本上每一个字都认识,放在一块儿应该也能理解它的意思吧?【呵呵】markdown

要点:spa

一、提供统一的接口,用于访问多个子系统。code

2、UML

涉及到的角色orm

(1)、门面类(Facade),提供一个统一的接口给客户端调用接口

(2)、各类子系统:OrderSystem、ProductSystem、PaySystem。it


3、实例

代码实现以下,基本没什么可说的,直接按照UML图,编写代码便可。io

(一)、各类系统服务:订单系统、支付系统、库存系统。

package com.facade;

public class OrderSystem {

    public void createOrder(){
        System.out.println("建立一个新的订单!!!");
    }

}复制代码

package com.facade;

public class PaySystem {

    public void pay(){
        System.out.println("支付:支付完成!!!");
    }
}复制代码

package com.facade;

public class ProductSystem {

    public void deProductCount(){
        System.out.println("扣减库存!!!");
    }
}
复制代码

(二)、门面类,提供一个统一的入口,让客户端调用

package com.facade;

public class Facade {

    private PaySystem paySystem;
    private OrderSystem orderSystem;
    private ProductSystem productSystem;

    public Facade(){
        paySystem = new PaySystem();
        orderSystem = new OrderSystem();
        productSystem = new ProductSystem();
    }

    public void buyABook(){
        paySystem.pay();
        orderSystem.createOrder();
        productSystem.deProductCount();
    }

}
复制代码

(三)、调用

package com.facade;

public class TestMain {

    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.buyABook();
    }
}
复制代码

(四)、执行结果


4、结论

门面模式(外观模式):提供一个统一接口,集中多个子系统,多个接口方法,提供服务。如编程中MVC模式,C(Controller)即为门面,提供统一入口、M(Model)即提供各类系统服务。

优点:

一、对客户端友好,有统一的入口提供给客户端。

二、对服务调用跟容易管理记录,也更安全。能够想象咱们提供一个购物接口确定比让客户端本身去调建立订单、减小库存、支付更安全,若是客户端忘了调某个服务,就会出现问题。

缺点:

一、门面类耦合了各类服务,较为复杂,容易出错。

相关文章
相关标签/搜索