如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)

标签: 设计模式初涉


场景引入

相信各位玩过LOL英雄联盟游戏的童鞋,对下面两个英雄都不会陌生吧:

     

分别是瑞雯和盲僧,这两个英雄都可以通过组合键的方式打出爆炸性伤害,
打出这套组合键除了需要较快的手速外,还需要记住键位顺序,对应技能:
瑞雯的光速QA:Q + 空格 + A + 鼠标左键 + Q + 空格 + A + 鼠标左键 + Q + 空格 + A + 鼠标左键
瞎子一秒七脚:Q + A + E + 九头蛇 + R + A + 闪现 + Q
注:光速QA的空格键是设置了大笑动作用来。

我们通过来演示下如何手把手打出这一波操作。


单身20年拼手速

先把各种需要用到的键位都列出来:A,E,Q,R,空格,闪现,九头蛇,鼠标左键

 

 

 

 

接着顺序我们依次按下对应按钮来打出连招

输出结果

尽管打出了连招,但是,每次按连招都需要把对应的每个键都操作一遍,
非常麻烦,而且对于我这种手残玩家,基本是按不出来的,有没有办法,
把每个按键的调用集成到一个键上,不用关心具体调用顺序与内容,只要
通过这个键就可以一键完成连招呢?当然是有的,通过外观模式可以
帮我们解决这个需求,我们将按键顺序(交互)封装到外挂(外观类)中。


手残党用脚本

非常简单,就是把调用逻辑抽取到外挂类中,暴露两个方法供玩家调用:

手残党玩家只需直接调用这个脚本即可完成一键光速QA和一秒7脚:

输出结果

用法非常简单,例子也很好理解,接下来直接上定义吧。


外观模式概念相关

定义

要求一个子系统的外部与内部的通信必须通过一个统一的对象进行,
外观模式提供一个高层次的接口,使得子系统更易于使用。
(其实就是封装,用于解决类与类间的依赖关系,比如本来是:
玩家依赖于:Q,A,E,R等键位对象,现在变成只依赖与脚本对象
从而降低了类间的耦合度。)

两个角色

  • Facade外观角色,客户端可以调用他的方法,在外观角色
    中可以知道相关子系统的功能和责任;在正常情况下,它将所有从客户
    端发来的请求委派到相应的子系统去,传递给相应的子系统对象处理。
  • Subsystem子系统角色,实现子系统的功能,处理外观类
    指派的任务,注意子系统类不含有外观类的引用

UML类图

使用场景

  • 为访问一系列复杂的子系统提供一个简单的入口
  • 客户端程序与多个子系统间存在很大的依赖性,可以引入外观模式帮助解耦
  • 在层次化结构中,可以使用外观模式定义系统中每一层的入口,层与层间不
    直接产生联系,而通过外观类进行关联,降低层间的耦合度。

优缺点

优点

  • 降低客户端与子系统间的耦合度;
  • 对客户屏蔽子系统组件,从而能简化接口,减少客户端处理的对象数目;
  • 一个子系统的修改对其他子系统没有任何影响,而且子系统内部变化也不会影响到外观对象

缺点

  • 在不引入抽象外观类的情况下,增加新的子系统可能需要修改
    外观类或客户端的源代码,违背了”开闭原则”。
  • 不能很好地限制客户使用子系统类,如果对客户访问子系统类
    做太多的限制则减少了可变性和灵活性。

本节代码

https://github.com/coder-pig/DesignPatternsExample/tree/master/10.Facade%20Pattern


如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)相关推荐

  1. 如何让孩子爱上设计模式 ——10.桥接模式(Bridge Pattern)

    如何让孩子爱上设计模式 --10.桥接模式(Bridge Pattern) 标签: 设计模式初涉 我有故事,你有酒吗?这年头写个技术文不讲个故事都不行,行,我讲: 还有发现很多的技术博文都开始有喜欢往 ...

  2. 研磨设计模式之外观模式(Facade)(解决方案)

    3.2  解决方案 3.2.1  外观模式来解决 用来解决上述问题的一个合理的解决方案就是外观模式.那么什么是外观模式呢? (1)外观模式定义 这里先对两个词进行一下说明,一个是界面,一个是接口. 界 ...

  3. php facade模,PHP 设计模式之外观模式 Facade

    简单描述 外观模式(Facade pattern),为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用. 外观模式又称为门面模式,它是一种对象结构型模式,遵循迪米特法则,又称最少知道原则 ...

  4. 设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用

    文章目录 Pre 定义 案例 Demo V1.0 Boss直接管理 V2.0 引入外观类 PmManagerFacade 何时使用Facade Tomcat Mybatis Pre 我们先来回顾下门面 ...

  5. 使用C#实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)

    本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...

  6. 设计模式之外观模式(Facade)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  7. 【设计模式】—— 外观模式Facade

    前言:[模式总览]----------by xingoo 模式意图 外观模式主要是为了为一组接口提供一个一致的界面.从而使得复杂的子系统与用户端分离解耦. 有点类似家庭常用的一键开关,只要按一个键,台 ...

  8. 设计模式(八): 从“小弟”中来类比外观模式(Facade Pattern)

    在此先容我拿"小弟"这个词来扯一下淡.什么是小弟呢,所谓小弟就是可以帮你做一些琐碎的事情,在此我们就拿"小弟"来类比"外观模式".在上面一篇 ...

  9. 设计模式之外观模式(Fasade Pattern)

    2019独角兽企业重金招聘Python工程师标准>>> 模式分析: 外观模式又称为门面模式,提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使 ...

最新文章

  1. 软件测试培训分享:软件测试初期怎么面试工作?
  2. 菜鸟崛起 DB Chapter 2 MySQL 5.6的概述与安装
  3. 计算机硬件常见问题及修复,pc机输入输出设备的常见故障现象及故障修复方法...
  4. vue 横向菜单滚动定位_使用vue组件+iscroll实现一个横向菜单,不能正确滑动
  5. 怎么做笔记标签贴_小红书笔记互动到底该怎么做?
  6. 【LeetCode】【HOT】236. 二叉树的最近公共祖先(递归)
  7. 数字人民币如何操作使用?
  8. 大规模Schedule任务实现方案
  9. python linux脚本加密解密,用Python解密Chrome Linux BLOB加密的cookie
  10. 持续技术开放 | SOFAStack 启用独立 Group
  11. STM32程序下载详解
  12. php后台发送qq消息,WebQQ消息发送功能
  13. 【图像去噪】基于马尔可夫随机场实现图像去噪附matlab代码
  14. 人力资源管理系统HRMS 天下三分 煮酒论英雄
  15. Handing time
  16. 静态网页设计课后练习
  17. for 语句的基本用法
  18. python——annotate函数
  19. MySql 指定某一字段排在前面
  20. 《产品管理精华》目录

热门文章

  1. Ubuntu使用Gparted调整分区大小—进入图形界面前一直停留在debian界面
  2. 宏定义函数与普通函数的区别
  3. 先验概率,后验概率,似然概率,条件概率,贝叶斯,最大似然
  4. [翻译]辉煌帝传说 第一章 太阳和黑水晶(3)
  5. 提升deepin下2.4G频段WiFi网速
  6. 从官网下载并设置typora主题
  7. Linux 时间同步ntpdate
  8. 线程的优先级、等待线程、守护线程
  9. 计算机网络协议——通信协议综述
  10. 化学专业大二转码的抉择之路!