我是靠谱客的博主 傻傻早晨,最近开发中收集的这篇文章主要介绍外观模式 - Unity外观模式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 外观模式
    • 结构
    • 实现
    • 应用场景
    • 利与弊

外观模式

外观模式是对象结构型模式,也叫门面模式,负责为多个复杂系统提供一个对外一致的接口,使得这些子系统可以更容易本人使用,同时也隔绝了客户端的直接调用,对于复杂系统来说,使用者没有深入了解这些系统,随意调用容易造成错误。通过外观模式将这些子系统的功能进行封装,从而可以使客户端简单的使用。

绝大多数框架和软件都会进行外观模式的封装,使用户不会看到内部的实现,只留一些常用的按钮或接口提供给开发者或使用者。即减少使用者对子系统学习的成本,也避免了因为使用不当,而造成的错误。

使用外观模式,将众多子系统全部封装,留一个接口,接口里只有一些用户常用的功能即可。这样的做法大大降低的客户端和系统直接的耦合。

结构

在这里插入图片描述
说明

  • 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外观模式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部