设计模式——外观模式(Facade)

基本介绍

外观模式(Facade),也叫过程模式,主要是为一组接口提供一个一致的“界面”,也就是定义一个更高层的接口,来对这一组接口进行统一的调度。这个接口使得者一组接口更容易使用。
外观模式通过定义一个一致的接口,就可以屏蔽这一组子接口的内部细节,使得调用防只需跟这个外观接口交互,而无需关系内部细节。

例子:

一个家庭私人影院有 爆米花机、DVD播放器、屏幕、影院灯光等,每一个都有操作开关,那一个个使用比较麻烦,且他们的操作都有一定的先后顺序,可以组合起来,于是给他们定义一个外观类。本质就是为了实现内聚

DVD播放器类:
public class DVDPlayer {

    //使用单例模式
    private static DVDPlayer instance = new DVDPlayer();

    public static DVDPlayer getInstance(){
        return instance;
    }


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

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

    public void play(){
        System.out.println("dvd is playing");
    }

    public void pause(){
        System.out.println("dvd pause ...");
    }
}
爆米花机
public class Popcorn {

    //使用单例模式
    private static Popcorn instance = new Popcorn();

    public static Popcorn getInstance(){
        return instance;
    }


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

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

    public void pop(){
        System.out.println("popcorn is popcorn");
    }

}
屏幕
public class Screen {

    //使用单例模式
    private static Screen instance = new Screen();

    public static Screen getInstance(){
        return instance;
    }


    public void up(){
        System.out.println("Screen up ");
    }

    public void down(){
        System.out.println("Screen down");
    }

}
影院灯光
public class TheaterLight {

    //使用单例模式
    private static TheaterLight instance = new TheaterLight();

    public static TheaterLight getInstance(){
        return instance;
    }


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

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

    public void dim(){
        System.out.println("TheaterLight dim .. ");
    }

    public void bright(){
        System.out.println("TheaterLight bright ...");
    }
}
外观类(用于整合)
public class HomeTheaterFacade {

    //定义多个子系统对象
    private TheaterLight theaterLight;
    private Popcorn  popcorn;
    private Screen screen;
    private DVDPlayer dvdPlayer;

    //构造器
    public HomeTheaterFacade() {
        this.theaterLight = TheaterLight.getInstance();
        popcorn = Popcorn.getInstance();
        screen = Screen.getInstance();
        dvdPlayer = DVDPlayer.getInstance();
    }

    //操作分4步
    public void ready(){
        popcorn.on();
        popcorn.pop();
        screen.down();
        dvdPlayer.on();
        theaterLight.on();
    }

    public void play(){
        dvdPlayer.play();
    }

    public void pause(){
        dvdPlayer.pause();
    }

    public void end(){
        popcorn.off();
        theaterLight.off();
        screen.up();
        dvdPlayer.off();
    }
}

这个模式很常用,很多同学都在用,只是不知道叫外观模式罢了

posted @ 2021-09-30 22:50  明月照江江  阅读(363)  评论(0编辑  收藏  举报