JAVA設計模式之外觀模式

1.定義

外觀模式提供統一的接口,用來訪問子系統中的一羣接口。外觀定義了一個高層接口,讓子系統更容易使用。
注:一個子系統可以創建多個外觀類

2.模式圖

外觀模式表示圖

3.外觀模式遵循的oo設計原則

最少知識原則:只和你的密友交談;也就是要減少對象之間的交互,只留下幾個“密友”。
這個原則可以避免太多的類耦合在一起,導致修改系統中一部分時會影響到其他部分,這樣這個系統需要花許多成本維護,也會因爲太複雜而不容易被瞭解。

4.案例

1) 背景描述
當你在家想看電影時,必須先執行以下的任務:
打開爆米花機
開始爆米花
將燈光調暗
放下屏幕
打開投影機
將投影機設置在寬屏模式
打開功放
將功放的輸入設置爲DVD
將功放設置爲環繞立體聲
將功放音量調到中
打開DVD播放器
開始播放DVD
2)看完電影后,還需要把一切都關掉,又要再一次去做這些動作?這個時候就需要使用到外觀模式了。

3)案例中的類關係圖
在這裏插入圖片描述

4)外觀類代碼實現,其他類省略。

public class HomeTheaterFacade {
    Amplifier amp;
    Tuner tuner;
    CdPlayer cd;
    Screen screen;

    public HomeTheaterFacade(Amplifier amp,Tuner tuner,CdPlayer cd,Screen screen){
        this.amp = amp;
        this.tuner = tuner;
        this.cd = cd;
        this.screen = screen;
    }

    //其他方法
	
	//將我們之前手動進行的每項任務以此處理,且每項任務都是委託子系統中相應的組件處理
    public void watchMovie(){
        proper.on();
        proper.pop();
        screen.down();
        amp.on();
        //...
    }

   //負責關閉一切
    public void endMovie(){
        proper.off();
        screen.down();
        amp.on();
        //.....
    }
}

5)測試類代碼

public class HomeTheaterFacadeTest {
    public static void main(String[] args) {
        //實例化子系統其他組件
        
        HomeTheaterFacade homeTheater = new HomeTheaterFacade(amp,tuner,dvd,cd,screen,popper);
        homeTheater.watchMovie("Start to watch movie");
        homeTheater.endMovie();
    }
}

5.外觀模式的優點

1)簡化了接口,如果客戶需要底層功能,依然可以將系統完成的功能暴露出來
2)將客戶從組件的子系統中解耦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章