栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

【设计模式】Unity3D 策略模式

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【设计模式】Unity3D 策略模式

行为型模式–策略模式

提示:文章只是个人的学习总结。


文章目录
  • 行为型模式--策略模式
  • 一、策略模式是什么?
  • 二、UML图
  • 三、实现步骤
    • 1、定义策略接口
    • 2、具体策略
    • 3、策略上下文
    • 4、实现类
  • 四、好处和坏处
    • 1、好处
    • 2、坏处
  • 五、适用场景


一、策略模式是什么?

策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法都是完成相同的工作,只是实现不同,它可以以相同的方式调用所有算法,减少各种算法类与使用算法类之间的藕合。

如在某个场景中有不同的实现方式,但是都是为了实现一个功能,我们可以将其定义成一组策略,每个实现类对应一个策略,在不同的场景就使用不同的实现类,并且可以自由切换策略。

当不同的行为堆砌在同一个类时,就很难避免使用条件语句去选择合适的行为,将这些行为封装在一个个独立的Strategy中,可以在使用这些行为的类去消除条件语句。


二、UML图

//TODO


三、实现步骤 1、定义策略接口

抽象类或者接口

using UnityEngine.UI;
public abstract class ChangeColor 
{
    public Image img;
    public virtual void ExChangeColor() { }
}
2、具体策略
//修改图片颜色为红色
using UnityEngine;
public class ChangeRed : ChangeColor
{
    public override void ExChangeColor()
    {
        img.color = Color.red;
    }
}

-------------------
//修改图片颜色为蓝色
using UnityEngine;
public class ChangeBlue : ChangeColor
{
    public override void ExChangeColor()
    {
        img.color = Color.blue;
    }
}
3、策略上下文

维护对strategy 对象的引用

代码如下(示例):

using UnityEngine.UI;
public class StategyContext 
{
    ChangeColor strategy;
    public StategyContext(ChangeColor strategy,Image img)
    {
        this.strategy = strategy;
        this.strategy.img = img;
    }

    public void StategyContextInterface()
    {
        strategy.ExChangeColor();
    }
}
4、实现类
using UnityEngine.UI;
public class StategyManager : MonoBehaviour
{
    [SerializeField] private Image img;
    StategyContext stategyContext;
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.R))
        {
            stategyContext = new StategyContext(new ChangeRed(), img);
            stategyContext.StategyContextInterface();
        }
        if (Input.GetKeyDown(KeyCode.B))
        {
            stategyContext = new StategyContext(new ChangeBlue(), img);
            stategyContext.StategyContextInterface();
        }
    }
}

四、好处和坏处 1、好处

1.减少大量if-else的使用
2.简化的单元测试
3.符合开闭原则,扩展性好、便于维护且代码优雅

2、坏处

1.滥用会导致会造成策略类膨胀,每次变化都会新增新的类
2.策略模式本身并没有改变需要判断,客户端必须知道所有的策略类的作用
3.无法同时在客户端使用多个策略类


五、适用场景

1.避免使用难以维护的多重条件选择语句
2.当策略中有较为复杂的数据结构或者算法不需要暴露在客户端或者其他时。


1,大话设计模式
2.策略模式

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906254.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号