策略模式(Strategy),策略模式和状态模式非常相似,都是属于那种 单个拥有者与抽象层以及继承抽象层下的各色类相互交互的模式
- 什么是策略模式/策略模式有什么用?
官方的说法是:策略模式是指对一系列算法的定义,并将这些算法分开包装起来,并随时可以切换这些方法。策略模式避免了反复的多重条件判断。
从某种角度说,我认为,策略模式是一种在无法修改传入参数的类型与数量时使用的一种方法“重载”;
与状态模式不同,策略模式的抽象层中不会保留拥有者的实例,继承抽象层的类也不会调用拥有者的功能,它只负责重写方法;
那。。我们的栗子嘛。。。
比如说。。伤害计算方法,
假设,我们场景中有玩家A与玩家B,
A给了B一拳,掉了10根头发,
B给了A一拳,但因为A有一个头套,所以他的帽子被打掉了,
B又给了A一拳,A因为没有了帽子,A掉了10根头发。
B刚刚使用了2连拳 第一拳的时候,A头上有头套,所以B并没有拽掉A的头发,但打掉了帽子,
第二拳的时候,A已经没有保护措施了,所以B成功拽掉了A的头发;
这就是策略模式了!
- 如何写一个策略模式?:设计模式 之 状态模式.代码
与状态模式不同的位置在于 抽象层 状态模式中的抽象层会有 状态拥有者的实例
namespace Ice
{
namespace 设计模式
{
namespace strategy
{
public class Context
{
gongjifangshi攻击方式 gongjifangshi;
public void SetGongjifangshi设置攻击方式(gongjifangshi攻击方式 gongjifangshi)
{
this.gongjifangshi = gongjifangshi;
}
public void Gongji攻击()
{
gongjifangshi.Gongjifangshi攻击方式();
}
}
public abstract class gongjifangshi攻击方式
{
public abstract void Gongjifangshi攻击方式();
}
public class gongjifangshi攻击方式A拽头发 : gongjifangshi攻击方式
{
public override void Gongjifangshi攻击方式()
{
Debug.Log("拽头发");
}
}
public class gongjifangshi攻击方式B打帽子 : gongjifangshi攻击方式
{
public override void Gongjifangshi攻击方式()
{
Debug.Log("打帽子");
}
}
}
}
}