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

2025-10-22 01:37:23

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 设计模式之 策略模式的实例介绍》讲解结束,谢谢

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢