外觀模式【結構型模式】

文章優先發表在個人博客,後續如果更新忘記同步抱歉。
個人博客本篇文章地址:https://www.xdx97.com/article/707951089365811200

一、引出外觀模式

比如我們要弄一個電影院,裏面有幕布、投影儀、摺疊椅等。
開始:放下幕布、打開投影儀、打開摺疊椅
中間:開始播放
結束:關閉幕布、關閉投影儀、關閉摺疊椅

設計這個系統

1、我們可以把幕布、投影儀、摺疊椅,看成一個小的系統,它裏面又有具體的相關操作。
2、我們有一個客戶端,比如開始的時候。我們就去調用幕布打開方法投影儀打開方法摺疊椅打開方法
3、同理我們的中間、結束也都是調用相對應的操作方法。

這樣存在一個問題就是:

  • 客戶端調用起來麻煩
  • 開始過程新增了一個操作,客戶端也要對應的去做出改變。
  • 圖示就是這樣,我們用戶直接進行相對應的操作

在這裏插入圖片描述



二、外觀模式

外觀模式理解起來很簡單,就是我們對其提出一個操作類,讓用戶去操作我們的操作類。不讓其直接使用對應的方法。在上面的例子中,用戶只需要知道我們有三個方法就好了。開始、中間、結束至於這裏面具體的操作我們用戶不需要知道。

在這裏插入圖片描述


注:幕布、投影儀、摺疊椅都是使用單例模式進行構造

Curtain(幕布)

public class Curtain {

    private Curtain(){}

    private static final Curtain curtain = new Curtain();

    public static Curtain getCurtain(){
        return curtain;
    }

    // 打開幕布
    public void openCurtain(){
        System.out.println("打開幕布....");
    }

    // 打開幕布
    public void closeCurtain(){
        System.out.println("關閉幕布....");
    }
}

Projector(投影儀)

public class Projector {

    private Projector(){}

    private static final Projector projector = new Projector();

    public static Projector getProjector(){
        return projector;
    }

    // 打開投影儀
    public void openProjector(){
        System.out.println("打開投影儀....");
    }

    // 開始播放
    public void startPlaying(){
        System.out.println("開始播放....");
    }

    // 打開投影儀
    public void closeProjector(){
        System.out.println("關閉投影儀....");
    }
}

FoldingChair (摺疊椅)

public class FoldingChair {

    private FoldingChair(){}

    private static final FoldingChair foldingChair = new FoldingChair();

    public static FoldingChair getFoldingChair(){
        return foldingChair;
    }

    // 打開投影儀
    public void openFoldingChair(){
        System.out.println("打開摺疊椅....");
    }

    // 打開投影儀
    public void closeFoldingChair(){
        System.out.println("關閉摺疊椅....");
    }
}

movie (電影 我們的中間層)

public class Movie {

    private Curtain curtain = Curtain.getCurtain();

    private FoldingChair foldingChair = FoldingChair.getFoldingChair();

    private Projector projector = Projector.getProjector();

    // 開始
    public void start(){
        // 打開幕布
        curtain.openCurtain();
        // 打開投影儀
        projector.openProjector();
        // 打開摺疊椅
        foldingChair.openFoldingChair();
    }

    // 中間
    public void middle(){
        projector.startPlaying();
    }

    // 結束
    public void end(){
        // 打開幕布
        curtain.closeCurtain();
        // 打開投影儀
        projector.closeProjector();
        // 打開摺疊椅
        foldingChair.closeFoldingChair();
    }
}

測試

public class Main {

    public static void main(String[] args) {
        Movie movie = new Movie();

        // 開始
        movie.start();
        // 中間
        movie.middle();
        // 結束
        movie.end();
    }
}

總結

  • 關於外觀模式我們很容易就去理解了。就是套一個殼子嘛
  • 當了我們學一個東西要靈活的運用。如果我們的底層系統就是隻有一個。那麼我們還需要中間層嘛?

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章