天天看點

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

前言

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

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

概述

定義

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

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

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

類圖

外觀模式(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("家庭影院已經關閉");

    }
}
           

運作結果

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

總結

  1. 外觀将客戶從一個複雜的子系統中解耦。
  2. 實作一個外觀,需要将子系統組合禁外觀中,然後将工作委托給子系統執行。
  3. 擴充卡将一個對象包裝起來以改變其接口;裝飾者将一個對象包裝起來以增加新的行為和責任;而外觀将一群對象“包裝”起來以簡化其接口。

繼續閱讀