前言
这篇文章介绍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)游戏中的一套动作复用多个模型。
来源:CSDN
作者:DaveAnt
链接:https://blog.csdn.net/m0_37920739/article/details/104363943