【结构型模式】外观模式

文章目录

      • 前言(一些废话,可以忽略)
        • 解决实际问题
        • 外观模式提高问题的扩展性
      • 总结

前言(一些废话,可以忽略)

  • 外观模式,比较简单也好理解,就是给一个东西一个外观,将其封装起来
  • 这里当然也会用到我们的组合
  • PS.部分类实现见文末

解决实际问题

  • 假设一个家庭影院,我们有3种或更多设备,电动屏幕,dvd,音响,当我们要观看电影时,得一步一步操作,先将屏幕放下,音响打开,dvd打开,三个步骤
  • 当我们要去上个厕所时,得先暂停dvd,再暂停音响(假如),这又是两个步骤
  • 当电影观看结束,需要关闭时,又有三个步骤等着我们
  • 思考一下,在观看电影的操作,或者结束观看操作这些步骤是不是都基本上是固定不变的呢,而且需要很多步才能如打开电影,那我们为什么不把这些不走整合封装起来呢,搞成一个按钮,只需要一键,就可以将dvd,音响,屏幕打开放下,结束时,也只需要一键,就可以将所有设备关闭好
  • 这就是我们今天的设计模式要解决的问题,外观模式

外观模式提高问题的扩展性

  • 设备1,dvd
/**
 * @program: ade-someproblem
 * @author: cade franklin
 * @create: 2020-01-04 04:11
 **/
public class DVD {
    public void play(){
        System.out.println("DVD.play");
    }

    public void pause(){
        System.out.println("DVD.pause");
    }

    public void close(){
        System.out.println("DVD.close");
    }
}
  • 设备2,音响
/**
 * @program: ade-someproblem
 * @author: cade franklin
 * @create: 2020-01-04 04:11
 **/
public class Radio {
    public void playRadio(){
        System.out.println("Radio.playRadio");
    }

    public void closeRadio(){
        System.out.println("Radio.closeRadio");
    }
}
  • 设备3,屏幕
/**
 * @program: ade-someproblem
 * @author: cade franklin
 * @create: 2020-01-04 04:11
 **/
public class Screen {
    public void down(){
        System.out.println("Screen.down");
    }

    public void up(){
        System.out.println("Screen.up");
    }
}
  • 在调用的客户端和设置之间设置一个缓冲层,聚合或组合各种设备,将设备的操作进行封装
/**
 * @program: ade-someproblem
 * @author: cade franklin
 * @create: 2020-01-04 04:11
 **/
public class FacadeMode {
    DVD dvd = new DVD();
    Radio radio = new Radio();
    Screen screen = new Screen();

    public void play() {
        screen.down();
        radio.playRadio();
        dvd.play();
    }

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

    public void end() {
        dvd.close();
        radio.closeRadio();
        screen.up();

    }
}
  • 这样,客户端在调用的时候就可以顺利的一键操作了
/**
 * @program: ade-someproblem
 * @author: cade franklin
 * @create: 2020-01-04 04:11
 **/
public class FacadeClient {
    public static void main(String[] args) {
        FacadeMode client = new FacadeMode();
        //开始看,一键打开
        client.play();
        //看完了,一键关闭
        client.end();
    }
}

总结

  • 外观模式比较好理解,就是将很多东西封装为一键模式
  • 在面对老代码的时候,可以将老代码的多个操作封装为一个方法,方便复用

愿你不舍爱与自由。

你可能感兴趣的:(#,设计模式)