1. 程式人生 > 其它 >圖解Java設計模式-外觀模式

圖解Java設計模式-外觀模式

一、介紹

外觀模式又叫門面模式,主要包含以下主要角色。

  1. 外觀(Facade)角色:為多個子系統對外提供一個共同的介面。
  2. 子系統(Sub System)角色:實現系統的部分功能,客戶可以通過外觀角色訪問它。
  3. 客戶(Client)角色:通過一個外觀角色訪問各個子系統的功能。

    二、使用場景

    (1) 開發階段,子系統越來越複雜,增加外觀模式提供一個簡單的呼叫介面。

    (2) 維護一個大型遺留系統的時候,可能這個系統已經非常難以維護和擴充套件,但又包含非常重要的功能,為其開發一個外觀類,以便新系統與其互動。

    三、使用案例

在日常生活中,我們可以利用小愛音箱去幫我們完成很多操作,比如開關電視、播放音樂、的開關空調,這就是一個外觀模式,讓小愛去幫我們去判斷該做什麼,該怎麼做,我們只需要和小愛音響去對接就行了。

1 public class TV {
2     public void on() {
3         System.out.println("開啟電視");
4     }
5 
6     public void off() {
7         System.out.println("關閉電視");
8     }
9 }
1 public class AirCondition {
2     public void on() {
3         System.out.println("開啟空調");
4     }
5 
6     public void off() {
7 System.out.println("關閉空調"); 8 } 9 }
 1 package com.crush.facade;
 2 
 3 //小愛音箱
 4 public class SmallLoveFacade {
 5 
 6     private TV tv;
 7     private AirCondition airCondition;
 8 
 9     public SmallLoveFacade() {
10         light = new Light();
11         tv = new TV();
12         airCondition = new
AirCondition(); 13 } 14 15 public void say(String message) { 16 if(message.contains("開電視")) { 17 onTV(); 18 } else if (message.contains("關電視")) { 19 offTV(); 20 } else if (message.contains("開空調")) { 21 onAirCondition(); 22 } else if (message.contains("關空調")) { 23 offAirCondition(); 24 } else { 25 System.out.println("小愛聽不明白你在說什麼"); 26 } 27 } 28 29 private void onTV() { 30 tv.on(); 31 } 32 33 private void offTV() { 34 tv.off(); 35 } 36 37 private void onAirCondition() { 38 airCondition.on(); 39 } 40 41 private void offAirCondition() { 42 airCondition.off(); 43 } 44 }

    三、總結
    優點:
    降低了子系統與客戶端之間的耦合度,使得子系統的變化不會影響呼叫它的客戶類。
    對客戶遮蔽了子系統元件,減少了客戶處理的物件數目,並使得子系統使用起來更加容易。
    降低了大型軟體系統中的編譯依賴性,簡化了系統在不同平臺之間的移植過程,因為編譯一個子系統不會影響其他的子系統,也不會影響外觀物件。
    缺點:
    不能很好地限制客戶使用子系統類,很容易帶來未知風險。
    增加新的子系統可能需要修改外觀類或客戶端的原始碼,違背了“開閉原則”。
    不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合適。