概述
文章目录
- 外观模式
- 结构
- 实现
- 应用场景
- 利与弊
外观模式
外观模式是对象结构型模式,也叫门面模式,负责为多个复杂系统提供一个对外一致的接口,使得这些子系统可以更容易本人使用,同时也隔绝了客户端的直接调用,对于复杂系统来说,使用者没有深入了解这些系统,随意调用容易造成错误。通过外观模式将这些子系统的功能进行封装,从而可以使客户端简单的使用。
绝大多数框架和软件都会进行外观模式的封装,使用户不会看到内部的实现,只留一些常用的按钮或接口提供给开发者或使用者。即减少使用者对子系统学习的成本,也避免了因为使用不当,而造成的错误。
使用外观模式,将众多子系统全部封装,留一个接口,接口里只有一些用户常用的功能即可。这样的做法大大降低的客户端和系统直接的耦合。
结构
说明
- Facade(外观)- 为众多子系统提供统一接口。客户端之间与外观类打交道,从而便捷的访问子系统。本身子系统不会察觉到外观类的存在。
- SubSystem(子系统)- 实现系统的功能。本身不与客户端直接接触。客户端也可以直接访问子系统,但需要深入了解实现的细节,和相应的执行顺序。
实现
我举一个机甲的例子
引擎 - 子系统1
public class Engine
{
public void StartUp()
{
Debug.Log("启动---");
}
public void Move()
{
Debug.Log("移动中---");
}
}
机枪 - 子系统2
public class MachineGun
{
public void Shooting()
{
Debug.Log("射击---");
}
}
防御装置 - 子系统3
public class DefensiveDevice
{
public void Defense()
{
Debug.Log("防御中---");
}
}
机甲类 - 门面类
/// <summary>
/// 机甲类(Facade 类)
/// </summary>
public class Mech
{
private Engine _engine;
private MachineGun _gun;
private DefensiveDevice _defensiveDevice;
public Mech()
{
_engine = new Engine();
_gun = new MachineGun();
_defensiveDevice = new DefensiveDevice();
}
public void Start()
{
_engine.StartUp();
}
public void MoveAndShooting()
{
_engine.Move();
_gun.Shooting();
}
public void MoveAndDefense()
{
_engine.Move();
_defensiveDevice.Defense();
}
}
调用
public class FacadeExample : MonoBehaviour
{
private void Start()
{
Mech mech = new Mech();
//启动
mech.Start();
//移动射击
mech.MoveAndShooting();
//移动防御
mech.MoveAndDefense();
}
}
外观类本身作为子系统的调用者,容易变的臃肿。我们可以分解外观类,来降低类的复杂。
应用场景
- 当子系统十分复杂时,客户端需要的功能较少时,使用外观类将客户端的功能封装,并以接口的形式提供给客户端。
- 当子系统组织为多层结构,也可以使用门面模式
- 若客户端与许多系统关联,我们需要引入外观模式,将他们分离。防止出错。
利与弊
优点
- 客户端无需和复杂系统打交道,降低客户端复杂性,也降低客户端出错的可能性和学习成本。
缺点
- 外观类拥有过多的子系统引用,容易称为上帝对象。
与其他模式比较
外观创建接口,适配器改变已有接口,装饰增强接口,代理使用原有接口。
外观是即创建对象,也实现对应功能,抽象工厂是对一系列的对象的创建,不负责实现功能。
外观模式可以使用单例,因为外观通常只有一个。
最后
以上就是傻傻早晨为你收集整理的外观模式 - Unity外观模式的全部内容,希望文章能够帮你解决外观模式 - Unity外观模式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复