Unity 设计模式之 策略模式的实例介绍
1、策略模式:
他定义了算法家族,分别封装起来,让他们之间可以互相替换;此模式让算法的变化,不会影响到使用算法的客户。

2、模式中的角色:
1)Context(上下文):用一个 ConcreteStrategy来配置。维护一个对 Strategy 对象的引用;
2)Strategy(策略类):定义所有支持的算法的公共接口;
3)ConcreteStrategy(具体策略类):封装了具体的算法或行为,继承 Strategy;
3、策略模式使用实例:

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

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

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






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,具体如下图

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

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