外觀模式

模式定義

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

示例

家庭影院看電影涉及到燈,DVD還有屏幕等對象,每一個對象中都提供不一樣的操做該對象的方法。若是使用子對象去實現看電影的操做這樣涉及到的對象不少,並且和子對象徹底耦合在一塊兒了。因此須要使用外觀模式進行子對象的封裝處理,咱們調用就調用外觀模式中提供的統一方法,實現和子系統中的解耦操做。this

/**
 * DVD
 *
 * @author Colin
 * @create 2018-05-10
 **/
public class DvdPlayer {
    public void on(){
        System.out.println("打開DVD");
    }

    public void off(){
        System.out.println("關閉DVD");
    }
}


/**
 * 燈具
 *
 * @author Colin
 * @create 2018-05-10
 **/
public class Light {

    public void on(){
        System.out.println("開燈");
    }

    public void off(){
        System.out.println("關燈");
    }
}

/**
 * 屏幕
 *
 * @author Colin
 * @create 2018-05-10
 **/
public class Screen {

    public void on(){
        System.out.println("打開屏幕");

    }

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


/**
 * 家庭影院
 *
 * @author Colin
 * @create 2018-05-10
 **/
public class HomeMovieFacade {

    private DvdPlayer dvdPlayer;
    private Light light;
    private Screen screen;

    public HomeMovieFacade(DvdPlayer dvdPlayer,Light light,Screen screen){
        this.dvdPlayer=dvdPlayer;
        this.light=light;
        this.screen=screen;
    }

    public void watchMovie(){

        light.off();
        dvdPlayer.on();
        screen.on();
    }
}

總結

  • 外觀模式將客戶從複雜的子系統中解耦出來
  • 實現一個外觀須要將子系統組合進外觀中,而後將工做委託給子系統執行code

    涉及原則對象

  • 最少知識原則,不要讓太多的類耦合在一塊兒,省得修改其中一部分會影響到其餘部分。接口

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息