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创建的模型
  • 热门搜索
    互助旅游 贵阳旅游网 高雄旅游 第一步旅游 赴美旅游签证 胡志明市旅游 板门店旅游 非洲旅游攻略 惠阳旅游景点大全 香港旅游全攻略