您的位置:首页 > 移动开发 > Unity3D

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

2017-09-12 21:04 246 查看
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),大大提高代码的可重用性

可以在程序运行时,改变对象模型的行为。

通过将一系列算法分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的用户。所有的算法都完成的是相同的工作,只是不同算法的实现方式不同,此模式可以让算法实用类以相同的方式调用不同的算法,降低了算法和算法实用类之间的耦合。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息