桥接模式

空扰寡人 提交于 2020-02-18 21:56:33

前言

这篇文章介绍Untiy中一套动作通用多个模型原理和画图软件一些模块原理。桥接模式就这样登场了。

 1.Unity引擎中的桥接模式

我们先看一下Unity中的一套动作通用多个模型原理,用过的大佬知道使用这个功能是有限制的,首先需要把模型改成Humanoid ,然后还要配置模型的手,脚,头等等的位置,才可以使用动作,具体的设置过程如图下:

 显示为绿色以后,说明节点配置成功。然后我们就可以对人物相关的动作进行复用了,接下来我们思考一下Unity是如何实现如此神奇功能,我们先定义一个亚索模型类,具体代码如下:

using System;
using System.Collections.Generic;
using System.Text;

namespace BridgePattern
{
    public abstract class Model
    {
        protected ActionApi actionApi;
        protected Model(ActionApi actionApi){
            this.actionApi = actionApi;
        }
        public abstract void executeAction();
    }

    public class Yasuo : Model
    {
        private int FbxId;

        public Yasuo(int FbxId,ActionApi actionApi):base(actionApi)
        {
            this.FbxId = FbxId;
        }

        public override void executeAction()
        {
            actionApi.executeAction(FbxId);
        }
    }
}

然后接下来实现一些动作的类。比如攻击动作,防御动作,具体代码如下:

using System;
using System.Collections.Generic;
using System.Text;

namespace BridgePattern
{
    public interface ActionApi
    {
        void executeAction(int FbxId);
    }

    public class AtkActionApi : ActionApi
    {
        public void executeAction(int FbxId)
        {
            Console.WriteLine("模型->" + FbxId + "执行攻击");
        }
    }

    public class DefActionApi : ActionApi
    {
        public void executeAction(int FbxId)
        {
            Console.WriteLine("模型->" + FbxId + "执行防御");
        }
    }

}

我们可以发现游戏的数据层和动作层就完全分离了,这个设计模式很棒,当我们不用桥接模式的时候就知道此模式的优秀之处,接下来就不用桥接模式去实现相同的功能。

2.不使用桥接模式会发生什么?

我们首先将亚索类进行重写,具体代码如下:

    public class Yasuo : Model
    {
        private int FbxId;

        public Yasuo(int FbxId)
        {
            this.FbxId = FbxId;
        }

        public void executeAtkAction()
        {
            Console.WriteLine("模型->" + FbxId + "执行攻击");
        }

        public void executeDefAction()
        {
            Console.WriteLine("模型->" + FbxId + "执行防御");
        }
    }

这个真是一个糟糕的方案,在亚索模型下实现executeAtkAction和executeDefAction。以后每一种模型都提供一套动作,不管动作是否可以通用,对比发现桥接模式将继承关系转换为关联关系,从而降低了类与类之间的耦合,减少了代码编写量。

总结

1.桥接模式的优缺点

1)缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

2)优点:符合高内聚低耦合的设计,系统扩展也更为方便,抽象和实现的分离。

2.桥接模式的使用场景

1)一些绘图软件中形状和颜色的分离设计。

2)游戏中的一套动作复用多个模型。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!