1. 程式人生 > >設計模式(9)外觀模式

設計模式(9)外觀模式

訪問 一個 離開 new ima eve ide isp http

我們每天上班回到家的時候都會做一系列的動作,像打開燈、打開電視和打開音響,用代碼描述就如下一樣。

技術分享圖片
public class Light {
    public void on() {
        System.out.println("打開了燈!");
    }

    public void off() {
        System.out.println("關閉了燈!");
    }
}
Light 技術分享圖片
public class Redio {
    public void on() {
        System.out.println(
"打開了音箱!"); } public void off() { System.out.println("關閉了音箱!"); } }
Redio 技術分享圖片
public class TV {
    public void on() {
        System.out.println("打開了電視!");
    }

    public void off() {
        System.out.println("關閉了電視!");
    }
}
TV

測試代碼

public static
void main(String[] args) { Light light = new Light(); Redio redio = new Redio(); TV tv = new TV(); System.out.println("回到了家"); light.on(); redio.on(); tv.on(); System.out.println("要離開家了"); light.off(); redio.off(); tv.off(); }

測試結果

技術分享圖片

我們發現,回到家需要打開這麽多東西,這對於上班回來疲憊的我們實在是太過於煎熬了,那能不能一下子就把所有的動作都執行了呢?方法是有的,就是使用外觀模式,我們只需要執行回家這個動作,就能實現這一系列的動作,做一個總和的操作。

技術分享圖片

添加的代碼如下

技術分享圖片
public class HomeAction {

    private Light light;

    private TV tv;

    private Redio redio;

    public HomeAction(Light light, TV tv, Redio redio) {
        this.light = light;
        this.tv = tv;
        this.redio = redio;
    }

    public void getHome() {
        light.on();
        tv.on();
        redio.on();
    }

    public void leaveHome() {
        light.off();
        tv.off();
        redio.off();
    }
}
HomeAction

測試代碼

public static void main(String[] args) {
        Light light = new Light();
        Redio redio = new Redio();
        TV tv = new TV();

        HomeAction homeAction = new HomeAction(light, tv, redio);
        System.out.println("回到了家");
        homeAction.getHome();
        System.out.println("要離開家了");
        homeAction.leaveHome();
    }

測試結果

技術分享圖片

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

外觀模式並不是用來給接口添加新的功能,它是用減少外部和子系統的交互,松散耦合,從而讓外部能夠更簡單地使用子系統。

設計模式(9)外觀模式