Unity C#
策略模式: 他定义了算法家族,分别封装起来,让他们之间可以互相替换;此模式让算法的变化,不会影响到使用算法的客户。
模式中的角色: 1)Context(上下文):用一个 ConcreteStrategy来配置。维护一个对 Strategy 对象的引用; 2)Strategy(策略类):定义所有支持的算法的公共接口; 3)ConcreteStrategy(具体策略类):封装了具体的算法或行为,继承 Strategy;
策略模式使用实例:
打开Unity,新建一个空工程,具体如下图
在工程中,新建几个脚本,然后双击打开,具体如下图
脚本的具体代码和代码说明如下图
CashSuperStrategy 脚本具体内容如下:public abstract class CashSuperStrategy { public abstract void acceptCash (double money);}
CashNormalConcreteStrategy 脚本具体内容如下:using UnityEngine;public class CashNormalConcreteStrategy : CashSuperStrategy { public override void acceptCash (double money) { Debug.Log ('正常收费:' + money); }}
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); }}
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); }}
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); }}
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); }}
脚本编译正确,回到Unity界面,在场景中新建一个 GameObject,并把 Test 脚本赋给 GameObject,具体如下图
运行场景,控制台 Console 打印如下图
到此,《Unity 设计模式之 策略模式的实例介绍》讲解结束,谢谢
您的支持,是我们不断坚持知识分享的动力,若帮到您,还请帮忙投票有得;若有疑问,请留言