首页 > 技术文章 > 外观模式理解和示例

milicool 2019-08-02 17:23 原文

一、是什么

定义:简化一群类的接口,达到屏蔽代码的复杂度

使用场景: 封装一系列复杂接口,以提供一个服务,简化接口

二、示例

现在模拟在家看漫威,哈哈哈

复杂版:

  1. 打开遥控器
  2. 选择电影栏目
  3. 选择钢铁侠
  4. 打开电影

使用外观模式,将负责封装后就变为:

  1. 打开钢铁侠电影

代码:

/**
 * 遥控器类
 */
public class RemoteControl {

    public void openTV() {
        System.out.println("打开电视");
    }
}

电视类

/**
 * 电视类
 */
public class TV {

    /**
     * 选择电影频道
     */
    public void choiceFilmChannel() {
        System.out.println("选择电影频道");
    }

    /**
     * 选择钢铁侠
     */
    public void choiceIronMan() {
        System.out.println("选择钢铁侠电影");
    }

    /**
     * 打开电影
     */
    public void openFilm() {
        System.out.println("打开电影");
    }
}

测试类:没有用外观模式时,我们需要这几步能看电影

/**
 * 看钢铁侠电影 测试类
 */
public class Test {

    public static void main(String[] args) {

        // ================== 复杂的方式 =========================
        RemoteControl remoteControl = new RemoteControl();
        TV tv = new TV();

        remoteControl.openTV();
        tv.choiceFilmChannel();
        tv.choiceIronMan();
        tv.openFilm();
    }
}

使用外观模式

/**
 * 外观模式下的看电影
 */
public class SeeFilmFacade {

    public void seeFilm() {
        RemoteControl remoteControl = new RemoteControl();
        TV tv = new TV();

        remoteControl.openTV();
        tv.choiceFilmChannel();
        tv.choiceIronMan();
        tv.openFilm();
    }
}

测试类: 使用外观模式

/**
 * 看钢铁侠电影 测试类
 */
public class Test {

    public static void main(String[] args) {
        
        // ================== 外观模式 =========================
        SeeFilmFacade seeFilmFacade = new SeeFilmFacade();
        seeFilmFacade.seeFilm();
    }
}

三、总结

这个模式看似简单,实际也简单

里面有个原则需关注:最少知识原则

要点:

  • 外观模式不是简化接口,也将客户从组件的子系统中解耦
  • 外观模式和适配器都可以包装类,但外观模式的意图是简化接口

 

推荐阅读