Unity_设计模式_外观模式_06
来源:互联网 发布:淘宝上买枪会判刑么 编辑:程序博客网 时间:2024/05/22 00:24
外观模式(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(); //光速QA public void SkillGroup1() { skill_q.Foo(); attack.Foo(); skill_q.Foo(); attack.Foo(); skill_q.Foo(); attack.Foo(); }}
}
模式优点:
它对客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
它实现了子系统与客户端之间的松耦合关系,这使得子系统的变化不会影响到调用它的客户端,只需要调整外观类即可。
一个子系统的修改对其他子系统没有任何影响,而且子系统的内部变化也不会影响到外观对象。
模式缺点:
不能很好地限制客户端直接使用子系统类,如果对客户端访问子系统类做太多的限制则减少了可变性和灵活性。
如果设计不当,增加新的子系统可能需要修改外观类的源代码,违背了开闭原则。
模式使用环境:
要为访问一系列复杂的子系统提供一个简单入口。
客户端程序与多个子系统之间存在很大的依赖性。
在层次化结构中,可以使用外观模式的定义系统中每一层的入口,层与层之间不直接产生联系,而是通过外观类建立联系,降低层之间的耦合度。
- Unity_设计模式_外观模式_06
- Unity_外观模式_030
- Unity_设计模式_状态模式_05
- Unity_设计模式_工厂模式_07
- Unity_设计模式_观察者模式_08
- Unity_设计模式_设计原则_02
- Unity_设计模式_简介_01
- Unity_设计模式_对象池_09
- Unity_设计模式_有限状态机_010
- 设计模式_外观模式
- Unity_设计模式_单例模式_04
- 装饰模式(设计模式_06)
- 大话设计模式_外观模式
- java设计模式_外观模式
- Java 设计模式_外观模式
- 设计模式_ 外观模式(12)
- Unity_设计模式简介_025
- Java设计模式_(结构型)_外观模式
- pix2code:从截图生成图形用户界面代码
- NIOS II 烧写epcs中遇到的问题
- Java 语言中 Synchronized 关键字的最致命误区
- C语言初步-第36讲: 用循环处理文字(有多少符号 )
- html之让横向ul内容居中
- Unity_设计模式_外观模式_06
- spring整合hibernate(不带hibernate配置文件)
- ServletContext对象访问文件(getResourceAsStream(String s),getResource(String s),getRealPath(String s))
- vector基础应用
- JAVA程序员,你会用IDEA吗?
- Spring Data JPA 与 MyBatis简单对比
- vue+SuperSlide 实现 自动刷新滚动
- java EE 配置web project 及Tomcat的运行配置
- Javascript Dom编程艺术读书笔记(四)