設計模式之門面模式

       作過電商系統的小夥伴應該知道,用戶購買一個東西以後,系統須要作的操做包括支付收費 、生成訂單,扣除庫存等幾個操做。若是不使用門面模式那是怎樣的呢?那咱們得分別爲支付收費、生成訂單,扣除庫存這幾個動做提供接口,讓用戶一個一個去調。使用門面模式就是咱們提供一個統一的接口,咱們來處理這幾個動做,用戶只要知道調了這個接口就能下單,購買到東西,並不須要去了解其中完成多少個步驟,有多少個子系統參與。編程

       這麼一說,你是否是已經一直在使用門面模式,只是你本身並無意識到你在使用它?雖然簡單,也一直已經在使用,仍是有必要探究一下它的細節以及注意點。安全

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)即提供各類系統服務。

優點:

一、對客戶端友好,有統一的入口提供給客戶端。

二、對服務調用跟容易管理記錄,也更安全。能夠想象咱們提供一個購物接口確定比讓客戶端本身去調建立訂單、減小庫存、支付更安全,若是客戶端忘了調某個服務,就會出現問題。

缺點:

一、門面類耦合了各類服務,較爲複雜,容易出錯。

相關文章
相關標籤/搜索