外觀模式(Facade Pattern)——隨遇而安

前言

​ 俗話說得好,隨着人類的進步,社會的發展(土土的小學生用語),家庭影院已經進入普通家庭。那麼如何構建一個集中管理的家庭影院軟件系統呢?注意家庭影院需要做很多有趣的事情哦,比如內含DVD播放器,投影儀,自動屏幕,環繞立體聲等。。。

​ 噹噹噹,外觀模式閃亮登場(QAQ)。。。

概述

定義

外觀模式(Facade Pattern)提供了一個統一的接口,用來訪問子系統中的一羣接口。外觀定義了一個高層接口,讓子系統更容易使用。

​ 外觀模式允許我們讓客戶和子系統之間避免緊耦合,而且遵循“最少知識”原則

”最少知識“原則:只和你的密友談話。也就是說,當你正在設計一個系統,不管是任何對象,你都要注意它所交互的類有哪些,並注意它和這些類是如何交互的。

類圖

這裏寫圖片描述
Facade:外觀角色

設計模式的實現

背景

​ 背景就是前言中提到的,實現家庭影院。現在,我需要實現對投影儀,空調,屏幕和燈的控制。這裏我們只實現對投影儀和屏幕的控制。

代碼實現

package Facade;

/**
 * 子系統——投影儀
 * Created by ChongLou on 2017/8/20.
 */
public class Projector {
    public void on() {
        System.out.println("打開了投影儀。。。");
    }

    public void off() {
        System.out.println("關閉了投影儀");
    }
}
package Facade;

/**
 * 子系統——屏幕
 * Created by ChongLou on 2017/8/20.
 */
public class Screen {
    public void on() {
        System.out.println("打開了屏幕");
    }

    public void off() {
        System.out.println("關閉了屏幕");
    }
}
package Facade;

/**
 * 家庭影院外觀
 * Created by ChongLou on 2017/8/20.
 */
public class HomeTheaterFacade {
    Projector projector;
    Screen screen;

    public HomeTheaterFacade(Projector projector, Screen screen) {
        this.projector = projector;
        this.screen = screen;
    }
    public void on(){
        projector.on();
        screen.on();
    }

    public void off(){
        screen.on();
        projector.on();
    }

}
package Facade;

/**
 * 客戶端
 * Created by ChongLou on 2017/8/20.
 */
public class Client {
    public static void main(String[] args) {
        Projector projector = new Projector();
        Screen screen = new Screen();
        HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade(projector, screen);
        homeTheaterFacade.on();
        System.out.println("家庭影院已經打開");
        homeTheaterFacade.off();
        System.out.println("家庭影院已經關閉");

    }
}

運行結果

這裏寫圖片描述

總結

  1. 外觀將客戶從一個複雜的子系統中解耦。
  2. 實現一個外觀,需要將子系統組合禁外觀中,然後將工作委託給子系統執行。
  3. 適配器將一個對象包裝起來以改變其接口;裝飾者將一個對象包裝起來以增加新的行爲和責任;而外觀將一羣對象“包裝”起來以簡化其接口。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章