概述参考请看 参考博客
策略模式的功能是把具体的算法实现,从具体的业务处理里面独立出来,把它们实现成为单独的算法类,从而形成一系列的算法,并让这些算法可以相互替换。
策略模式UML
策略模式原型代码
假如我们是商家,对于不同的Vip用户要打不同的折扣。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class StrategyMode : MonoBehaviour
{
private void Start()
{
double money = 1000f;
Strategy strategyNormal = new ConcreteStrategy1();
Strategy strategyVip = new ConcreteStrategy2();
Strategy strategySuperVip = new ConcreteStrategy3();
Price priceNormal = new Price(strategyNormal);
Debug.Log("普通用户花费:" + priceNormal.CalculateMoney(money));
Price priceVip = new Price(strategyVip);
Debug.Log("Vip用户花费:" + priceVip.CalculateMoney(money));
Price priceSuperVip = new Price(strategySuperVip);
Debug.Log("超级Vip用户花费:" + priceSuperVip.CalculateMoney(money));
}
}
public class Price
{
private Strategy mStrategy;
public Price(Strategy strategy)
{
mStrategy = strategy;
}
public double CalculateMoney(double money)
{
if (mStrategy != null)
{
return mStrategy.Calculate(money);
}
return -1;
}
}
public interface Strategy
{
double Calculate(double money);
}
public class ConcreteStrategy1 : Strategy
{
public double Calculate(double money)
{
Debug.Log("普通用户,不打折。");
return money;
}
}
public class ConcreteStrategy2 : Strategy
{
public double Calculate(double money)
{
Debug.Log("Vip用户,打9折。");
return money * 0.9f;
}
}
public class ConcreteStrategy3 : Strategy
{
public double Calculate(double money)
{
Debug.Log("超级Vip用户,打8折。");
return money * 0.8f;
}
}
在游戏中,游戏中角色等级变化时,许多属性也会变化。在写属性的变化算法上,就可以用到策略模式去计算值的变化。
/// <summary>
/// 策略模式
/// 计算当角色等级增加时,属性的提升
/// </summary>
public interface IAttributeStrategy
{
int GetExtraHPValue(int lv);
int GetExtraAttackValue(int lv);
}
/// <summary>
/// 战士属性
/// </summary>
public class SoldierAttributeStrategy : IAttributeStrategy
{
public int GetExtraHPValue(int lv)
{
//每级增加10血量
return (lv - 1) * 10;
}
public int GetExtraAttackValue(int lv)
{
//每级增加2攻击力
return (lv - 1) * 2;
}
}
/// <summary>
/// 敌人属性
/// </summary>
public class EnemyAttributeStrategy : IAttributeStrategy
{
public int GetExtraHPValue(int lv)
{
//每级增加15血量
return (lv - 1) * 15;
}
public int GetExtraAttackValue(int lv)
{
//每级增加3攻击力
return (lv - 1) * 3;
}
}
当角色升级时,就可以根据策略模式获取需要增加的属性值。
优点
缺点
原文:https://www.cnblogs.com/Fflyqaq/p/11679066.html