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