Unity3d之设计模式(四)外观模式
来源:互联网 发布:在管委会上班好吗知乎 编辑:程序博客网 时间:2024/04/30 03:48
外观模式
外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。
这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
介绍
意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接口。
何时使用: 1、客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"即可。 2、定义系统的入口。
如何解决:客户端不与系统耦合,外观类与系统耦合。
解释:简单来说,客户端需要调用一个特别复杂的子系统中的多个接口,如果直接调用逻辑处理起来会非常复杂,而且不便于系统扩展。外观模式把这个复杂的子系统统一起来,提供几个高层接口,以备客户端进行调用。通俗来说是:子系统是一个黑匣子,提供若干个透明接口以备调用。
UML类图
基本代码:
using UnityEngine;public class TestFacade : MonoBehaviour {void Start () { //外观模式打开电器 Facade face = new Facade(); face.TurnOnAll(); face.TurnOffAll(); //非外观模式打开电器 HomeLight light = new HomeLight(); AirCondition airCondition = new AirCondition(); AirFan airFan = new AirFan(); //打开电器 light.TurnOn(); airCondition.TurnOn(); airFan.TurnOn(); //关闭电器 light.TurnOff(); airCondition.TurnOff(); airFan.TurnOff(); }}//外观类(门面类)class Facade{ HomeLight light; AirCondition airCondition; AirFan airFan; public Facade() { light = new HomeLight(); airCondition = new AirCondition(); airFan = new AirFan(); } //外观方法A public void TurnOnAll() { light.TurnOn(); airCondition.TurnOn(); airFan.TurnOn(); } //外观方法B public void TurnOffAll() { light.TurnOff(); airCondition.TurnOff(); airFan.TurnOff(); }}//电灯class HomeLight{ public void TurnOn() { Debug.Log("开灯"); } public void TurnOff() { Debug.Log("关灯"); }}//空调class AirCondition{ public void TurnOn() { Debug.Log("开空调"); } public void TurnOff() { Debug.Log("关空调"); }}//电扇class AirFan{ public void TurnOn() { Debug.Log("开电扇"); } public void TurnOff() { Debug.Log("关电扇"); }}
优缺点:
优点:
1)外观模式对客户端屏蔽了子系统组件,从而简化了接口,减少了客户端处理的对象数目并使子系统的使用更加简单。
2)外观模式实现了子系统与客户之间的松耦合关系,而子系统内部的功能组件是紧耦合的。松耦合使得子系统的组件变化不会影响到它的客户端。
缺点:
增加新的子系统可能需要修改外观类或客户端,违背了“开闭原则”。
使用场景:
1)为一个复杂的子系统提供一个简单的接口。
2)在层次化结构中,可以使用外观模式定义系统中每一层的入口。
3)子系统需要独立性。
参考:http://www.cnblogs.com/wangjq/archive/2012/07/10/2583672.html
参考:http://www.runoob.com/design-pattern/design-pattern-tutorial.html
- Unity3d之设计模式(四)外观模式
- 设计模式之四:外观模式(Facade Pattern)
- 设计模式之外观(Facade)模式
- 设计模式之外观模式(Facade)
- 【设计模式】之外观模式(Facade)
- 设计模式之外观模式(Facade)
- 设计模式之外观模式(Facade)
- 设计模式之外观(Facade)模式
- 设计模式之外观模式(Facade)
- 设计模式之外观模式(Facade)
- 设计模式之(Facade)外观模式
- 设计模式之 - 门面(外观)模式
- 设计模式之外观模式(Facade)
- 设计模式之外观模式(Java)
- 设计模式之门面(外观)模式
- 设计模式之外观模式(Facade)
- 设计模式之外观模式(Facade)
- 设计模式之外观
- 写写我理解的递归
- 连续子数组的最大和
- 容量规划经验谈:
- 解决更新yum源的时候报错404的问题
- 更高的抽象,更高的格局:
- Unity3d之设计模式(四)外观模式
- 搞清楚局部和全部,搞清楚逻辑和物理,搞清楚这些对于理解一些组件的概念是非常有意义的:
- 响应中断的锁与定时锁的实现原理
- 使用adb从Android中pull文件到windows
- 如何快速认识一个组件:
- Git学习笔记
- 在技术选型前,如何调研组件,经验谈:
- 构造函数与类外定义
- 大数据相乘