Unity 设计模式之 策略模式的实例介绍

 时间:2026-02-12 23:36:24

1、策略模式:

       他定义了算法家族,分别封装起来,让他们之间可以互相替换;此模式让算法的变化,不会影响到使用算法的客户。

Unity 设计模式之 策略模式的实例介绍

2、模式中的角色:

       1)Context(上下文):用一个 ConcreteStrategy来配置。维护一个对 Strategy 对象的引用;

       2)Strategy(策略类):定义所有支持的算法的公共接口;

       3)ConcreteStrategy(具体策略类):封装了具体的算法或行为,继承 Strategy;

3、策略模式使用实例:

Unity 设计模式之 策略模式的实例介绍

1、打开Unity,新建一个空工程,具体如下图

Unity 设计模式之 策略模式的实例介绍

2、在工程中,新建几个脚本,然后双击打开,具体如下图

Unity 设计模式之 策略模式的实例介绍

3、脚本的具体代码和代码说明如下图

Unity 设计模式之 策略模式的实例介绍

Unity 设计模式之 策略模式的实例介绍

Unity 设计模式之 策略模式的实例介绍

Unity 设计模式之 策略模式的实例介绍

Unity 设计模式之 策略模式的实例介绍

Unity 设计模式之 策略模式的实例介绍

4、CashSuperStrategy 脚本具体内容如下:

public abstract class CashSuperStrategy  {

    public abstract void acceptCash (double money);

}

5、CashNormalConcreteStrategy 脚本具体内容如下:

using UnityEngine;

public class CashNormalConcreteStrategy : CashSuperStrategy {

    public override void acceptCash (double money)

    {

        Debug.Log ("正常收费:" + money);

    }

}

6、CashRebateConcreteStrategy 脚本具体内容如下:

using UnityEngine;

public class CashRebateConcreteStrategy : CashSuperStrategy {

    private double moneyRebate = 1.0d;

    public CashRebateConcreteStrategy(double rebate){

        moneyRebate = rebate;

    }

    public override void acceptCash (double money)

    {

        money *= moneyRebate;

        Debug.Log ("打折收费:"+ money);

    }

}

7、CashReturnConcreteStrategy 脚本具体内容如下:

using System;

using UnityEngine;

public class CashReturnConcreteStrategy : CashSuperStrategy {

    private double moneyCondition = 0;

    private double moneyReturn = 0;

    public CashReturnConcreteStrategy(double moneyCondtion, double moneyReturn){

        this.moneyCondition = moneyCondtion;

        this.moneyReturn = moneyReturn;

    }

    public override void acceptCash (double money)

    {

        if(money >= moneyCondition){

            money = money - Math.Floor (money / moneyCondition) * moneyReturn;

        }

        Debug.Log ("正常收费:" + money);

    }

}

8、CashContext 脚本具体内容如下:

public class CashContext  {

    private CashSuperStrategy cashSuper;

    public CashSuperStrategy CashSuper {

        get {

            return cashSuper;

        }

        set {

            cashSuper = value;

        }

    }

    public CashContext(CashSuperStrategy cashSuper){

    

        this.cashSuper = cashSuper;

    }

    public void AcceptMoney(double money){

        cashSuper.acceptCash (money);

    }

}

9、CashContext 脚本具体内容如下:

using UnityEngine;

public class Test : MonoBehaviour {

    private CashContext cash;

    // Use this for initialization

    void Start () {

        cash = new CashContext (new CashNormalConcreteStrategy());

        cash.AcceptMoney (358);

        cash.CashSuper = new CashRebateConcreteStrategy (0.9d);

        cash.AcceptMoney (358);

        cash.CashSuper = new CashReturnConcreteStrategy (300, 100);

        cash.AcceptMoney (358);

    }

}

10、脚本编译正确,回到Unity界面,在场景中新建一个 GameObject,并把 Test 脚本赋给 GameObject,具体如下图

Unity 设计模式之 策略模式的实例介绍

11、运行场景,控制台 Console 打印如下图

Unity 设计模式之 策略模式的实例介绍

12、到此,《Unity 设计模式之 策略模式的实例介绍》讲解结束,谢谢

  • Unity 设计模式之 组合模式的实例介绍
  • Unity 设计模式之 原型模式的实例介绍
  • 如何控制unity动作快慢
  • unity3d怎么设置成中文
  • unity3d中如何导入3dmax创建的模型
  • 热门搜索
    暖气费什么时候交 魂牵梦萦的意思 390分能上什么大学 指正是什么意思 最有内涵的生日祝福语 运动会祝福语 信用社考试考什么 有什么好的qq昵称 娓娓动听是什么意思 有什么好听的dj