zoukankan      html  css  js  c++  java
  • 外观模式理解和示例

    一、是什么

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

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

    二、示例

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

    复杂版:

    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();
        }
    }

    三、总结

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

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

    要点:

    • 外观模式不是简化接口,也将客户从组件的子系统中解耦
    • 外观模式和适配器都可以包装类,但外观模式的意图是简化接口
  • 相关阅读:
    HDU6301 SET集合的应用 贪心
    线段树与树状数组的对比应用
    树状数组
    JDBC链接MySQL数据库
    HDU4686Arc of Dream 矩阵快速幂
    HDU1757矩阵快速幂
    B1013. 数素数 (20)
    B1023. 组个最小数 (20)
    [教材]B1020. 月饼 (25)
    [教材]A1025. PAT Ranking (25)
  • 原文地址:https://www.cnblogs.com/milicool/p/11278599.html
Copyright © 2011-2022 走看看