前言
俗話說得好,隨着人類的進步,社會的發展(土土的小學生用語),家庭影院已經進入普通家庭。那麼如何構建一個集中管理的家庭影院軟件系統呢?注意家庭影院需要做很多有趣的事情哦,比如內含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("家庭影院已經關閉");
}
}
運行結果
總結
- 外觀將客戶從一個複雜的子系統中解耦。
- 實現一個外觀,需要將子系統組合禁外觀中,然後將工作委託給子系統執行。
- 適配器將一個對象包裝起來以改變其接口;裝飾者將一個對象包裝起來以增加新的行爲和責任;而外觀將一羣對象“包裝”起來以簡化其接口。