定義:java
提供統一接口,訪問子系統中的一羣接口。函數
現實中的外觀模式:
this
現代的軟件系統都是比較複雜的,設計師處理複雜系統的一個常見方法即是將其「分而治之」,把一個系統劃分爲幾個較小的子系統。若是把醫院做爲一個子系統,按照部門職能,這個系統能夠劃分爲掛號、門診、劃價、化驗、收費、取藥等。看病的病人要與這些部門打交道,就如同一個子系統的客戶端與一個子系統的各個類打交道同樣,不是一件容易的事情。spa
首先病人必須先掛號,而後門診。若是醫生要求化驗,病人必須首先劃價,而後繳費,才能夠到化驗部門作化驗。化驗後再回到門診室。設計
上圖描述的是病人在醫院裏的體驗,圖中的方框表明醫院。code
解決這種不便的方法即是引進門面模式,醫院能夠設置一個接待員的位置,由接待員負責代爲掛號、劃價、繳費、取藥等。這個接待員就是門面模式的體現,病人只接觸接待員,由接待員與各個部門打交道。orm
代碼:接口
一、子系統(部門)
開發
public class Class1 { public void handler(){ System.out.println("一、掛號"); } }
public class Class2 { public void handler(){ System.out.println("二、掛門診"); } }
public class Class3 { public void handler(){ System.out.println("三、劃價"); } }
public class Class4 { public void handler(){ System.out.println("四、取藥"); } }
二、接待員get
public class Person { private Class1 class1; private Class2 class2; private Class3 class3; private Class4 class4; /** * 之因此這裏用構造函數,不用get/set方法呢,英文這些參數都是必需要傳的,不然沒法完成流程 * @param class1 * @param class2 * @param class3 * @param class4 */ public Person(Class1 class1, Class2 class2, Class3 class3, Class4 class4) { this.class1 = class1; this.class2 = class2; this.class3 = class3; this.class4 = class4; } public void goIll(){ class1.handler(); class2.handler(); class3.handler(); class4.handler(); } }
三、結果
一、掛號 二、掛門診 三、劃價 四、取藥
注意:
一、其實這裏存在一個BUG,因此單獨用外觀模式在現實的開發沒有任何用處。
你如今每一個步驟之間沒有關聯關係,你去每一個地方都要拿單子,才能進行下一步啊。
二、外觀模式作流程比較好