Unity3D设计模式之策略模式
发表于2018-07-12
当代码中的条件语句变多就会让整个代码部分变的臃肿,后期维护起来也比较麻烦,当策略模式的出现后可以比较好的解决这个问题。下面就让我们来了解下策略模式。
1.策略模式的定义
对策略模式的理解需要一些多态基础,将不同的算法分装起来,根据调用者的身份返回对应的算法算出的结果,让它们之前可以互相替换,此模式让算法的变化独立于使用算法的客户,将对象模型(Model)与对象的一些经常变动的行为(Behaviour)进行分离,将原有的“Is-A”(是一个类)模式改为“Has-A”(类包含类)模式。
2.策略模式的原理

其中会计代表算法 p 和 c 代表两个不同的对象 都调用这个算法 得到不同的结果
3.举例说明
public class Context
{
Strategy strategy;
public Context(Strategy strategy) //初始化时传入策略
{
this.strategy = strategy;
}
public void ContextInterface() //策略使用接口
{
strategy.AlgorithmInterface();
}
}
//算法基类
public abstract class Strategy
{
public abstract void AlgorithmInterface();
}
//吃肉算法
public class ConcreteStrategyC : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("吃肉");
}
}
//吃馒头算法
public class ConcreteStrategyB : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("吃馒头");
}
}
//吃米饭算法
public class ConcreteStrategyA : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine("吃米饭");
}
}
//客户端
class Program
{
static void Main(string[] args)
{
Console.WriteLine("饿了...");
Console.WriteLine("喜欢吃什么?");
string likeFood = Console.ReadLine().Trim();
Context context = null;
switch(likeFood)
{
case "rice":
context = new Context(new ConcreteStrategyA());
break;
case "bun":
context = new Context(new ConcreteStrategyB());
break;
case "meat":
context = new Context(new ConcreteStrategyC());
break;
}
if (null != context)
context.ContextInterface();
}
}
4.优点
相对于普通的面向对象设计(Object - Oriented),大大提高代码的可重用性
可以在程序运行时,改变对象模型的行为。
通过将一系列算法分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的用户。所有的算法都完成的是相同的工作,只是不同算法的实现方式不同,此模式可以让算法实用类以相同的方式调用不同的算法,降低了算法和算法实用类之间的耦合。
来自:https://blog.csdn.net/battletiger/article/details/77949668
