zoukankan      html  css  js  c++  java
  • 策略模式随笔

      http://www.cnblogs.com/zhanghaipeng-Unity3D/p/4752734.html

      策略模式是通过将一系列算法分别封装起来,让它们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的用户。所有的算法都完成的是相同的工作,只是不同算法的实现方式不同,此模式可以让算法实用类以相同的方式调用不同的算法,降低了算法和算法实用类之间的耦合。

      假如一个人(客户端,算法使用类),现在比较饿(需要解决的问题),所以要吃东西(算法基类)来消除饿的感觉,同样是吃东西,我们可以吃米饭(算法类1),吃馒头(算法类2),吃肉(算法类3)等等,来达到让我们不饿的目的,UML图如下:

      代码实现如下:

      //如何解决饿

      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();

        }
      }

      正如我们所看到的,当需要增加新的算法时,仍然需要修改原有代码。

        

  • 相关阅读:
    20169221 2016-2017-2 《移动平台应用开发实践》第十一周学习总结
    20169221 2016-2017-2 《移动平台应用与开发》第十周实验总结
    20169201 2016-2017-2 《网络攻防实践》实验三 缓冲区溢出实验
    20169218 2016-2017-2 《网络攻防实践》第九周作业
    2016-2017 《移动平台开发》实验三 敏捷开发与XP实践
    20169221 2016-2017-2 实验一 网络攻防环境的搭建与测试
    实验二《Java面向对象》实验报告
    20169221 2016-2017-2 《移动平台开发》第七周学习总结
    20169221 2016-2017-2 《网络攻防》第七周学习总结
    20169221 2016-2017-2 《移动平台开发》第六周学习总结
  • 原文地址:https://www.cnblogs.com/zhanghaipeng-Unity3D/p/4752734.html
Copyright © 2011-2022 走看看