外观模式【结构型模式】

文章优先发表在个人博客,后续如果更新忘记同步抱歉。
个人博客本篇文章地址: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();
    }
}

总结

  • 关于外观模式我们很容易就去理解了。就是套一个壳子嘛
  • 当了我们学一个东西要灵活的运用。如果我们的底层系统就是只有一个。那么我们还需要中间层嘛?

在这里插入图片描述

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