• 设计模式——外观模式详解


    0. 前言

    写在最前面,本人的设计模式类博文,建议先看博文前半部分的理论介绍,再看后半部分的实例分析,最后再返回来复习一遍理论介绍,这时候你就会发现我在重点处标红的用心,对于帮助你理解设计模式有奇效哦~

    当我们开发Android的时候,无论是SDK还是封装API,我们在不经意之间就会使用到外观模式,它通过一个外观类使得整个系统的结构只有一个统一的高层接口,对用户屏蔽各个子功能系统的实现,从而可以降低用户的使用成本。

     

    1. 外观模式模式介绍

    外观模式定义:

    外部与一个或多个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得子系统的调用更加方便。

     

    外观模式的使用场景:

    1)在开发阶段,子系统会因为不断的重构演化而变得越来越复杂或者被整体替换,这种易变性给外部调用它们的用户带来了使用上的困难,使用外观模式可以提供一个简单的接口,减少它们之间的依赖

    2)如果完成一个功能需要子系统协调完成,可以通过外观接口屏蔽这个子系统之间的交互逻辑。否则用户在使用时容易出错。

     

    外观模式包括的角色:


    1Facade:外观类,系统对外的统一接口,将客户端的请求代理给相应的子系统对象。

    2Subsystem:子系统类,实现子系统的功能,注意子系统类不含有外观类的引用。

     

    2. 外观模式模式实例介绍

    通过上面给出的角色类,我们可以实现一个简单的实例,电视遥控器是现实生活中一个比较好的外观模式的运用,遥控器(外观类)可以控制电源的开关(子系统A)、频道的切换(子系统B)等功能。遥控器统一对这些子模块的控制,而不是在用户使用时通过多个遥控器来分别完成上述功能。

    下面我们就来通过外观模式模拟一下遥控器系统,代码也比较简单:

    // 外观类
    public class TvController {
        private PowerSystem mPowerSystem = new PowerSystem();
        private ChannelSystem mChannelSystem = new ChannelSystem();
        public void powerOn() {
            mPowerSystem.powerOn();
        }
        public void powerOff() {
            mPowerSystem.powerOff();
        }
        public void nextChannel() {
            mChannelSystem.next();
        }
        public void prevChannel() {
            mChannelSystem.prev();
        }
    }
    
    //子系统类
    //电源子系统类
    class PowerSystem {
        public void powerOn() {
            System.out.println("开机");
        }
        public void powerOff() {
            System.out.println("关机");
        }
    }
    //频道子系统类
    class ChannelSystem {
        public void next() {
            System.out.println("下一频道");
        }
        public void prev() {
            System.out.println("上一频道");
        }
    }
    
    //使用时
    TvController controller = new TvController();
    controller. powerOn();
    controller. nextChannel ();
    controller. prevChannel ();
    controller. powerOff();
    

    //运行结果
    开机
    下一频道
    上一频道
    关机
    

    从上面客户端的使用代码可以看出,外观模式从很大程度上提高了客户端使用的便捷性,使得客户端无须关心子系统的工作细节,通过外观类对象controller即可调用相关功能。

     

    3. 外观模式的优点

    1)对客户隐藏子系统细节,减少了客户与子系统之间的耦合,可以方便地应对子系统的变化。

    2)毫无疑问方便了用户的使用。

  • 相关阅读:
    LintCode2016年8月22日算法比赛----骰子求和
    LintCode2016年8月22日算法比赛----平面列表
    LintCode2016年8月22日算法比赛----将数组重新排序以构造最小值
    LintCode2016年8月22日算法比赛----克隆二叉树
    Leetcode算法比赛----Longest Absolute File Path
    Leetcode算法比赛----First Unique Character in a String
    vue运行报错Error: listen EADDRNOTAVAIL 192.168.1.105:8080
    vue使用lrz插件压缩图片
    <input type="file">原型难看
    vue创建全局变量以及全局方法
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461461.html
Copyright © 2020-2023  润新知