Java設計模式之面板模式,java設計模式外觀
一、簡介
面板模式(Facade),隱藏內部各子系統的細節與複雜性,向用戶端提供一個同一的調用介面,使得複雜系統易於被訪問和使用。
面板模式,簡單點講就是把複雜的各個子系統組合成一個介面,提供給客戶使用。如,主要涉及3個重要角色:
1、子系統角色:實現子系統的邏輯功能。對於用戶端來說是未知的,子系統之間可以有互動。
2、門戶角色:核心角色。供用戶端調用,熟悉內部子系統功能。根據客戶需求對子系統進行功能對組合,抽象為一個介面。
3、客戶角色:通過調用Facade介面來完成要實現的功能
二、實戰
假設有一棟別墅,裡面有很多門,比如臥室門、大廳門、廚房門,主人出遠門之前必須要把這些門關上,一般的做法就是一個一個關上,如果採用面板模式,可以提供一個總開關,統一對所有門進行開關控制。
首先定義一個關門操作的介面:
public interface Door { public void closeDoor();}
臥室門、大廳門、廚房門分別建立一個類,實現Door介面:
public class BedroomDoor implements Door { public void closeDoor() { System.out.println("closing bedroom door."); }}
public class KitchenDoor implements Door { public void closeDoor() { System.out.println("closing kitchen door."); }}
public class HallDoor implements Door { public void closeDoor() { System.out.println("closing hall door."); }}
門面類,對各種門的關門操作進行組合或者合并,只提供唯一的介面
public class DoorFacade { Door bd = new BedroomDoor(); Door kd = new KitchenDoor(); Door hd = new HallDoor(); public void closeDoor() { bd.closeDoor(); kd.closeDoor(); hd.closeDoor(); }}
用戶端,通過調用門面類的介面即可將所有的門關閉
public class Client { public static void main(String[] args) { DoorFacade facade = new DoorFacade(); facade.closeDoor(); }}
運行結果:
三、優點
1、鬆散耦合:使得用戶端和子系統之間解耦,讓子系統內部的模組功能更容易擴充和維護;
2、簡單易用:用戶端根本不需要知道子系統內部的實現,或者根本不需要知道子系統內部的構成,它只需要跟Facade類互動即可;
3、更好地劃分訪問層次:有些方法是對系統外的,有些方法是系統內部相互互動的使用的。子系統把那些暴露給外部的功能集中到門面中,這樣就可以實現用戶端的使用,很好的隱藏了子系 統內部的細節。