設計模式之外觀模式

2021-10-01 11:16:15 字數 2475 閱讀 8253

定義了乙個高層、統一的介面,外部與通過這個統一的介面對子系統中的一群介面進行訪問。

通過建立乙個統一的類,用來包裝子系統中乙個或多個複雜的類,客戶端可以通過呼叫外觀類的方法來呼叫內部子系統中所有方法

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。在開發階段,子系統往往因不斷的重構演化而變得越來越複雜,增加外觀模式可以提供乙個簡單的...