定義了乙個高層、統一的介面,外部與通過這個統一的介面對子系統中的一群介面進行訪問。
通過建立乙個統一的類,用來包裝子系統中乙個或多個複雜的類,客戶端可以通過呼叫外觀類的方法來呼叫內部子系統中所有方法
1.實現客戶類與子系統類的松耦合
2.降低原有系統的複雜度
3.提高了客戶端使用的便捷性,使得客戶端無須關心子系統的工作細節,通過外觀角色即可呼叫相關功能。
4.避免了系統與系統之間的高耦合度
5.使得複雜的子系統用法變得簡單
背景:小成的爺爺已經80歲了,乙個人在家生活:每次都需要開啟燈、開啟電視、開啟空調;睡覺時關閉燈、關閉電視、關閉空調;
衝突:行動不方便,走過去關閉那麼多電器很麻煩,**如下:
1.電器類
//燈類
public class subsystema_light
public void off()
} //電視類
public class subsystemb_television
public void off()
} //空調類
public class subsystemc_aircondition
public void off()
}
客戶端呼叫
public class facade pattern
}
從上面可以看出,在不使用外觀模式的情況下,小成爺爺需要對每個電器都進行操作,非常不方便
解決方案
小成買了乙個智慧型家具控制器(外觀物件/統一介面)給他爺爺,他爺爺只需要一鍵就能開啟/關閉 燈、電視機、空調
1.電器類同上
2.外觀類:智慧型遙控器
public class facade
//起床後一鍵開電器
public void on
//睡覺時一鍵關電器
system.out.prinln("睡覺了");
light.off();
television.off();
aircondition.off();
}
}
客戶端呼叫
public class facade pattern{
public static void main(string args){
{//例項化電器類
subsystema_light light = new subsystema_light();
subsystemb_television television = new subsystemb_television();
subsystemc_aircondition aircondition = new subsystemc_aircondition();
//傳參
facade facade = new facade(light,television,aircondition);
//客戶端直接與外觀物件進行互動
facade.on;
system.out.prinln("可以看電視了");
facade.off;
system.out.prinln("可以睡覺了");
優點1.降低了客戶類與子系統類的耦合度,實現了子系統與客戶之間的松耦合關係
只是提供了乙個訪問子系統的統一入口,並不影響使用者直接使用子系統類
減少了與子系統的關聯物件,實現了子系統與客戶之間
的松耦合關係,松耦合使得子系統的元件變化不會影響到它的客戶。
2.外觀模式對客戶遮蔽了子系統元件,從而簡化了介面,減少了客戶處理的物件數目並使子系統的使用更加簡單。
3.引入外觀角色之後,使用者只需要與外觀角色互動;
使用者與子系統之間的複雜邏輯關係由外觀角色來實現
降低原有系統的複雜度和系統中的編譯依賴性,並簡化了系統在不同平台之間的移植過程
缺點
在不引入抽象外觀類的情況下,增加新的子系統可能需要修改外觀類或客戶端的源**,違背了「開閉原則」
不能很好地限制客戶使用子系統類,如果對客戶訪問子系統類做太多的限制則減少了可變性和靈活性。
設計模式之外觀模式
外觀模式提供了乙個統一的介面,用來訪問子系統中的一群介面。這樣可以避免客戶端和子系統之間的緊耦合。這種模式需要將一系列的子系統組合到外觀中,然後將具體的工作交給各個子系統去完成。如此一來,可以簡化介面的呼叫。其本質就是將系統與客戶端互動的地方封裝起來。這個模式,總體來說,很簡單,理解起來也不困難。依...
設計模式之外觀模式
外觀模式 為子系統中的一組介面提供乙個一直的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。即通過乙個中類來完成客戶端的請求。拿機房收費系統的上機過程來說,上機需要顯示上機者的資訊,填寫上機狀態表,填寫上機記錄表。而使用者不需要知道這些功能是怎麼實現的,只需要通過介面操作就可以完...
設計模式之外觀模式
外觀模式,為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。在設計初期階段,應該要有意識的將不同的兩個層分離,比如經典的三層架構,層與層之間建立外觀facade。在開發階段,子系統往往因不斷的重構演化而變得越來越複雜,增加外觀模式可以提供乙個簡單的...