門面模式( Facade Pattern) 也叫做外觀模式, 是一種比較常用的封裝模式,特別重要的就是封裝二字,看完下面的介紹,也許你會發現在工作的過程中,很有可能你就用過外觀模式,只不過當時並不知曉這樣寫還是一種設計模式呢。
其定義如下: 要求一個子系統的外部與其內部的通信必須通過一個統一的對象進行。 門面模式提供一個高層次的接口, 使得子系統更易於使用。
類圖就這麼簡單, 但是它代表的意義可是異常複雜, Subsystem Classes是子系統所有類的簡稱, 它可能代表一個類,也可能代表幾十個對象的集合。甭管多少對象,我們把這些對象全部圈入子系統的範疇。
下面看一下示意圖,可能會更好的理解。
門面對象是外界訪問子系統內部的唯一通道, 不管子系統內部是多麼雜亂無章, 只要有門面對象在, 就可以做到“金玉其外, 敗絮其中”。
簡單的門面對象代碼
package com.yifeng.test22;
public class Facade {
// 被委託的對象
private ClassA a = new ClassA();
private ClassB b = new ClassB();
private ClassC c = new ClassC();
// 提供給外部訪問的方法
public void methodA() {
this.a.doSomethingA();
}
public void methodB() {
this.b.doSomethingB();
}
public void methodC() {
this.c.doSomethingC();
}
}
看到這裏也許你就會明白了,這不就是封裝調用嗎,MVC中的Control層調用Service甚至都可以理解爲一種外觀模式,將複雜的業務邏輯都卸載Service,Control作爲Facade對象與外界(接口)對接。
在說一個使用環境,給外界提供接口的時候,可以只暴漏一個門面(接口對象),讓外界都訪問這個門面對象,們面對像內在做具體的業務邏輯進行區分是什麼接口採用什麼應對策略。