美文网首页Java 杂谈
二十三种设计模式之外观模式

二十三种设计模式之外观模式

作者: 呆某人 | 来源:发表于2018-08-19 21:40 被阅读2次

外观模式是我在工作之中首次用到的一种设计模式,当时我正在接入公司内部的用户体系,将每一个需要调用的用户接口都封装成了一个独立的方法,在我封装好之后准备使用的时候发现这些接口是有调用顺序的,而且我并不希望像这种调用顺序内部细节被暴露出来,因为我只想调用一个简单的接口,传入一个令牌,然后得到自己的用户实体类,将复杂的调用隐藏起来,降低复杂度。

于是我想起来我之前学过的外观模式,它会将一个或者数个类的复杂的一切隐藏在背后,只显露出一个感觉美好的外国

接下来举个栗子,在忙碌了一周之后,我们回到家中,想要看一部电影,那么我需要在看电影前做一些准备

打开爆米花机
开始爆米花
将灯光调暗
放下屏幕
打开投影机
将投影机的输入切换到DVD
将投影机设置在宽屏模式
打开功放
将功放的输入设置为DVD
将功放设置为环绕立体声
将功放音量调到中(5)
打开DVD播放器
开始播放DVD
为了看个电影,要做这么多操作,虽然有点累但是接下来你就可以舒舒服服的靠在少发上看电影了。

过了两个小时,你看完了电影,准备去睡觉了,还要把所有的东西都关掉,这又是比较麻烦的事情。

但是,如果有一个开关,你只需要按一个按键,它就会自动将所有的准备工作做好了,或者关闭所有东西,你会不会感觉到很幸福,因为它很简单,直接将你所需要的东西给你了,相当于一个宏控制按钮,当然你也可以自己去做其中的一部分操作。

接下来上代码

public class DvdPlayer {
 
    public void on(){
        System.out.println("打开dvd");
    }
    
    public void play(String movie){
        System.out.println("播放电影:"+movie);
    }
    
    public void off(){
        System.out.println("关闭dvd");
    }
}
public class Lights {
 
    public void dim(){
        System.out.println("将灯光调暗");
    }
    
    public void on(){
        System.out.println("将灯光打开");
    }
}
public class PopcornPopper {
 
    public void on(){
        System.out.println("打开爆米花机");
    }
    
    public void pop(){
        System.out.println("开始爆米花");
    }
    
    public void off(){
        System.out.println("关掉爆米花机");
    }
}
public class Screen {
 
    public void down(){
        System.out.println("将屏幕放下");
    }
    
    public void up(){
        System.out.println("将屏幕生升起");
    }
}
public class HomeTheaterFacade {
 
    private DvdPlayer dvd;
    private Lights lights;
    private Screen screen;
    private PopcornPopper popper;
    
    public HomeTheaterFacade(DvdPlayer dvd,Lights lights,Screen screen,PopcornPopper popper){
        this.dvd = dvd;
        this.lights = lights;
        this.screen = screen;
        this.popper = popper;
    }
 
    public void watchMovie(){
        System.out.println("准备好开始看电影...");
        popper.on();
        popper.pop();
        lights.dim();
        screen.down();
        dvd.on();
        dvd.play("星球大战");
    }
    
    public void endMovie(){
        System.out.println("关掉所有的开关...");
        popper.off();
        lights.on();
        screen.up();
        dvd.off();
    }
    
    public DvdPlayer getDvd() {
        return dvd;
    }
 
    public void setDvd(DvdPlayer dvd) {
        this.dvd = dvd;
    }
 
    public Lights getLights() {
        return lights;
    }
 
    public void setLights(Lights lights) {
        this.lights = lights;
    }
 
    public Screen getScreen() {
        return screen;
    }
 
    public void setScreen(Screen screen) {
        this.screen = screen;
    }
 
    public PopcornPopper getPopper() {
        return popper;
    }
 
    public void setPopper(PopcornPopper popper) {
        this.popper = popper;
    }
    
}
public class ExteriorTest {
public static void main(String[] args) {
    DvdPlayer dvd = new DvdPlayer();
    Lights lights = new Lights();
    PopcornPopper popper = new PopcornPopper();
    Screen screen = new Screen();
    
    HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade(dvd, lights, screen, popper);
    homeTheaterFacade.watchMovie();
    homeTheaterFacade.endMovie();
}
}

运行结果


20180812134739668.png

首先定义四个类:dvd机、屏幕、灯、爆米花机

再定义家庭影院类,由家庭影院类中提供两个宏命令公共方法,看电影和停止看电影,这两个方法中集成了其它类中的方法,以一定的顺序执行方法,向外界提供了简单易用的接口,降低了接口使用的复杂性。

相关文章

  • 二十三种设计模式之外观模式

    外观模式是我在工作之中首次用到的一种设计模式,当时我正在接入公司内部的用户体系,将每一个需要调用的用户接口都封装成...

  • 设计模式之 外观模式

    概述 UML类图 代码栗子 总结 概述概念 外观模式又叫做门面模式,提供一个更方便,高层接口,使用一致性的界面使得...

  • Java实现23种设计模式(九):外观模式

    二十三种设计模式分类 一、概述 外观(Facade)模式的定义:是一种通过为多个复杂的子系统提供一个一致的接口,而...

  • Android设计模式——外观模式(七大结构型)

    1.外观模式介绍 外观模式(Facade Pattern),是七大结构型设计模式之一。 外观模式运...

  • 设计模式 总纲

    常用的设计模式有二十三种,除此之外,又不断发展出新的设计模式,我先总结一下常用的这二十三种。 一,设计模式的分类 ...

  • 设计模式[9]-外观模式-Facade Pattern

    1. 外观模式 外观模式(Facade Pattern),又称为门面模式,是非常常用的结构性设计模式。外观模式使得...

  • java设计模式-外观模式(Facade)

    外观模式,属于结构性模式。属于设计模式里面比较简单的设计模式,本人认为是最简单的设计模式。 所谓外观,就是我们能看...

  • 了解外观模式

    java 设计模式 ------外观模式 Java中一共有23种设计模式,每种设计模式各有特...

  • 设计模式之-4.外观模式

    每看一次设计模式,感觉每一个设计模式看起来是那么简单,对于外观模式我的理解就是外观模式:外观模式,这个名字起得不怎...

  • 2018-11-05iOS&二十三种设计模式&快速记忆

    二十三种设计模式,分为三大类:一、创建型设计模式,共五种:单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模...

网友评论

    本文标题:二十三种设计模式之外观模式

    本文链接:https://www.haomeiwen.com/subject/amjhiftx.html