Unity3D 设计模式---策略模式

来源:互联网 发布:淘宝怎么提升排名靠前 编辑:程序博客网 时间:2024/06/06 02:31

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),大大提高代码的可重用性
可以在程序运行时,改变对象模型的行为。
通过将一系列算法分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的用户。所有的算法都完成的是相同的工作,只是不同算法的实现方式不同,此模式可以让算法实用类以相同的方式调用不同的算法,降低了算法和算法实用类之间的耦合。

原创粉丝点击