如何让孩子爱上设计模式 ——11.外观模式(Facade Pattern)
如何让孩子爱上设计模式 ——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)相关推荐
- 如何让孩子爱上设计模式 ——10.桥接模式(Bridge Pattern)
如何让孩子爱上设计模式 --10.桥接模式(Bridge Pattern) 标签: 设计模式初涉 我有故事,你有酒吗?这年头写个技术文不讲个故事都不行,行,我讲: 还有发现很多的技术博文都开始有喜欢往 ...
- 研磨设计模式之外观模式(Facade)(解决方案)
3.2 解决方案 3.2.1 外观模式来解决 用来解决上述问题的一个合理的解决方案就是外观模式.那么什么是外观模式呢? (1)外观模式定义 这里先对两个词进行一下说明,一个是界面,一个是接口. 界 ...
- php facade模,PHP 设计模式之外观模式 Facade
简单描述 外观模式(Facade pattern),为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用. 外观模式又称为门面模式,它是一种对象结构型模式,遵循迪米特法则,又称最少知道原则 ...
- 设计模式 -结构型模式_门面模式(外观模式) Facade Pattern 在开源软件中的应用
文章目录 Pre 定义 案例 Demo V1.0 Boss直接管理 V2.0 引入外观类 PmManagerFacade 何时使用Facade Tomcat Mybatis Pre 我们先来回顾下门面 ...
- 使用C#实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)
本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有 ...
- 设计模式之外观模式(Facade)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 【设计模式】—— 外观模式Facade
前言:[模式总览]----------by xingoo 模式意图 外观模式主要是为了为一组接口提供一个一致的界面.从而使得复杂的子系统与用户端分离解耦. 有点类似家庭常用的一键开关,只要按一个键,台 ...
- 设计模式(八): 从“小弟”中来类比外观模式(Facade Pattern)
在此先容我拿"小弟"这个词来扯一下淡.什么是小弟呢,所谓小弟就是可以帮你做一些琐碎的事情,在此我们就拿"小弟"来类比"外观模式".在上面一篇 ...
- 设计模式之外观模式(Fasade Pattern)
2019独角兽企业重金招聘Python工程师标准>>> 模式分析: 外观模式又称为门面模式,提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使 ...
最新文章
- 软件测试培训分享:软件测试初期怎么面试工作?
- 菜鸟崛起 DB Chapter 2 MySQL 5.6的概述与安装
- 计算机硬件常见问题及修复,pc机输入输出设备的常见故障现象及故障修复方法...
- vue 横向菜单滚动定位_使用vue组件+iscroll实现一个横向菜单,不能正确滑动
- 怎么做笔记标签贴_小红书笔记互动到底该怎么做?
- 【LeetCode】【HOT】236. 二叉树的最近公共祖先(递归)
- 数字人民币如何操作使用?
- 大规模Schedule任务实现方案
- python linux脚本加密解密,用Python解密Chrome Linux BLOB加密的cookie
- 持续技术开放 | SOFAStack 启用独立 Group
- STM32程序下载详解
- php后台发送qq消息,WebQQ消息发送功能
- 【图像去噪】基于马尔可夫随机场实现图像去噪附matlab代码
- 人力资源管理系统HRMS 天下三分 煮酒论英雄
- Handing time
- 静态网页设计课后练习
- for 语句的基本用法
- python——annotate函数
- MySql 指定某一字段排在前面
- 《产品管理精华》目录