外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。

一个客户类需要和多个业务类交互,而这些需要交互的业务类经常会作为一个整体出现。
引入一个新的外观类(Facade)来负责和多个业务类【子系统(Subsystem)】进行交互,而客户类只需与外观类交互。
为多个业务类的调用提供了一个统一的入口,简化了类与类之间的交互。
没有外观类:每个客户类需要和多个子系统之间进行复杂的交互,系统的耦合度将很大。
引入外观类:客户类只需要直接与外观类交互,客户类与子系统之间原有的复杂引用关系由外观类来实现,从而降低了系统的耦合度。
定义

一个子系统的外部与其内部的通信通过一个统一的外观类进行,外观类将客户类与子系统的内部复杂性分隔开,使得客户类只需要与外观角色打交道,而不需要与子系统内部的很多对象打交道。
外观模式:为子系统中的一组接口提供一个统一的入口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。对象结构型模式。
又称为门面模式,是迪米特法则的一种具体实现。
通过引入一个新的外观角色来降低原有系统的复杂度,同时降低客户类与子系统的耦合度。
所指的子系统是一个广义的概念,它可以是一个类、一个功能模块、系统的一个组成部分或者一个完整的系统。
结构

外观模式包含以下2个角色:
Facade(外观角色)
SubSystem(子系统角色)
实例说明
游戏中技能组合的使用:
LOL瑞文的光速QA,可以设置为一键触发,然后就不需要繁琐的操作,出错的概率更低,在不设置之前,我们该怎么实现光速QA?
Q一下,A一下,Q一下,A一下,Q一下,A一下,你需要进行6次操作,当我们设置好之后,我们就可以按下我们之前设置的一个键位,直接触发这个操作,自动帮我们完成。
我们怎么实现这个效果?(这中技能组合我们在过程中,是可以打断的)。
然而,你也可以组合一个,大招CD和Q的CD好的时候的一套技能组合。
最懒玩家甚至可以设置,全部技能CD好的情况下的,技能连招,甚至加上点燃。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FacadeModel
{

class Program
{static void Main(string[] args){SkillManager skillManager = new SkillManager();skillManager.SkillGroup1();}
}
//平A攻击
class Attack
{public void Foo(){Console.WriteLine("平A了一次");}
}
//Q技能
class Skill_Q
{public void Foo(){Console.WriteLine("释放一段符文之刃技能");}
}
class Skill_W
{public void Foo(){Console.WriteLine("释放技能--震魂怒吼");}
}
class Skill_E
{public void Fo(){Console.WriteLine("释放技能--勇往直前");}
}
class Skill_R
{public void Foo(){Console.WriteLine("释放技能--放逐之锋");}
}
//召唤师技能
class SummonerSkill
{public void Light(){Console.WriteLine("释放召唤师技能--点燃");}public void Blink(){Console.WriteLine("释放召唤师技能--闪现");}
}
class SkillManager
{Attack attack = new Attack();Skill_Q skill_q = new Skill_Q();Skill_W skill_w = new Skill_W();Skill_E skill_e = new Skill_E();Skill_R skill_r = new Skill_R();SummonerSkill summonerSkill = new SummonerSkill();//光速QApublic void SkillGroup1(){skill_q.Foo();attack.Foo();skill_q.Foo();attack.Foo();skill_q.Foo();attack.Foo();}
}

}
模式优点
它对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
它实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可。
一个子系统的修改对其他子系统没有任何影响,而且子系统的内部变化也不会影响到外观对象。
模式缺点
不能很好地限制客户端直接使用子系统类,如果对客户端访问子系统类做太多的限制则减少了可变性和灵活性。
如果设计不当,增加新的子系统可能需要修改外观类的源代码,违背了开闭原则。
模式使用环境
要为访问一系列复杂的子系统提供一个简单入口。
客户端程序与多个子系统之间存在很大的依赖性。
在层次化结构中,可以使用外观模式的定义系统中每一层的入口,层与层之间不直接产生联系,而是通过外观类建立联系,降低层之间的耦合度。

Unity_设计模式_外观模式_06相关推荐

  1. JS常用的设计模式(7)—— 外观模式

    JS常用的设计模式(7)-- 外观模式 外观模式(门面模式),是一种相对简单而又无处不在的模式.外观模式提供一个高层接口,这个接口使得客户端或子系统更加方便调用. 用一段再简单不过的代码来表示 var ...

  2. Swift 中的设计模式 #3 外观模式与适配器模式

    作者:Andrew Jaffee,原文链接,原文日期:2018-09-04 译者:郑一一:校对:BigNerdCoding,pmst,Forelax:定稿:Forelax 本文是我的设计模式系列教程的 ...

  3. Javascript 设计模式之外观模式【讲师辅导】-曾亮-专题视频课程

    Javascript 设计模式之外观模式[讲师辅导]-770人已学习 课程介绍         随着 javascript ES6/7 的发布,很多老版本的设计模式的实现,今天来看是错误的,将被彻底. ...

  4. 移动开发 | Swift 中的设计模式 #3 外观模式与适配器模式

    本文是我的设计模式系列教程的第三篇.在第一篇文章中,我介绍了 创建型模式中的工厂模式和单例模式.在第二篇文章中,又讨论了一下 行为型模式中的观察者模式和备忘录模式. 在本文中,我会就结构型模式中的外观 ...

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

    如何让孩子爱上设计模式 --11.外观模式(Facade Pattern) 标签: 设计模式初涉 场景引入 相信各位玩过LOL英雄联盟游戏的童鞋,对下面两个英雄都不会陌生吧:       分别是瑞雯和 ...

  6. [设计模式C++]外观模式

    系列文章总结一些比较常见的设计模式,外观模式是由GoF提出的23种设计模式的一种,使用非常简单. 2021-09-16 增加一个例子 区别于代理模式,都像是插入第三者,但是外观模式是统筹管理子系统,就 ...

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

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

  8. 设计模式 - 结构型模式_外观模式

    文章目录 结构型模式 概述 Case Bad Impl Better Impl 小结 结构型模式 结构型模式主要是解决如何将对象和类组装成较大的结构, 并同时保持结构的灵活和⾼效. 结构型模式包括:适 ...

  9. Java 设计模式_代理模式(2016-08-19)

    概念: 代理模式是对象的结构模式.代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用. 就是一个人或者机构代表另一个人或者机构采取行动.在一些情况下,一个客户不想或者不能够直接引用一 ...

最新文章

  1. Linux Core Dump
  2. 【Codeforces Round #507 (Div. 2, based on Olympiad of Metropolises) A】Palindrome Dance
  3. 大山深处,有一所希望学校
  4. 让机器学会看图说话:Image Caption任务最新综述
  5. AnnotationConfigApplicationContext容器初始化
  6. 比亚迪汉鸿蒙系统测评_华为正式进军汽车领域!鸿蒙OS车机系统加持:帮助更多车企quot;造好车quot;...
  7. 利用httponly提升应用程序安全性
  8. Vue 开发环境显示log信息
  9. mysql中有exist吗_关于MySQL 中 EXISTS 的用法
  10. 使用Entity Framework时遇到的问题
  11. 清澄A1223. 画圈圈(范浩强)
  12. Holo 使用场景说明
  13. 概率空间probability space 伯努利实验 n次伯努利实验
  14. 吴恩达《深度学习专项》笔记+代码实战(六):改进梯度下降算法(mini-batch, Momentum, Adam)
  15. /Users/apple/.zshrc:2: command not found: i 终端报错解决方法
  16. 软件测试职业规划 (面试题)
  17. python pandas excel数据处理_Python利用pandas处理Excel数据的应用
  18. java学习--装饰器设计模式
  19. 哈希算法--暴雪的mpq技术
  20. “千元机皇” realme真我Q3系列发布 越级体验999元起

热门文章

  1. 诛仙3服务器位置,诛仙3 5月19日服务器合区公告 10组服务器进行合区
  2. 2021-2025年中国农用拖拉机行业市场供需与战略研究报告
  3. 十月丰收季,程序员小跃都收获了什么?
  4. 利用Python轻松实现视频合成!
  5. 自学 C Prime Plus 第六版
  6. 苹果手机python_Python 某东苹果评价 让你手机不怕踩坑 !
  7. 如何简单理解执行上下文?
  8. 通过cookie记住用户名和密码
  9. [转] 杨澜这样说,非常经典!
  10. 申请美国大学最具含金量的各类学科竞赛汇总