zoukankan      html  css  js  c++  java
  • 设计模式-策略模式

    策略模式:定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响使用算法的客户。

        我觉得,策略模式有点类似于工厂模式:继承一个父类,不同的子类实现父类的方法都不同,然后根据需求初始化相应的子类。不同的是策略模式是针对算法的,工厂模式可以使用所有这种情况。
    依然以截取网页功能为例:
    截取算法父类:


          对于不同的网页截取算法不同,可以抽象一个父类,它有一个截取算法

     public class ReadStrategeSuper
      {
        public abstract string ReadWebPage(){}
      }

      对于第一种网页对应算法一:

     public class ReadStratege1:ReadStrategeSuper
      {
        public overrride string ReadWebPage(){算法1;}
      }

       对于第二种网页对应算法二:

      public class ReadStratege2:ReadStrategeSuper
      {
        public overrride string ReadWebPage(){算法2;}
      }

     有一个Context来决定采用哪种策略(类似于工厂)。

    public class Context
      {
        ReadStrategeSuper readSuper;
        public Context(ReadStrategeSuper readSuper)
        {
          this.readSuper = readSuper;
        }
        public string GetResult()
        {
          return readSuper.ReadWebPage();
        }
      }

        调用

      main()
      {
         Context context;
         第一种网页
         context = new Context(new ReadStratege1());
         string resultStr1 = context.GetResult();
         
         第二种网页
         context = new Context(new ReadStratege2());
         string resultStr2 = context.GetResult();
         
         ... ...
      }

        这样的好处是算法独立,易于修改维护,缺点是类太多,对于算法很多的情况,类太多管理反而不太方便。

  • 相关阅读:
    How to load custom styles at runtime (不会翻译,只有抄了 )
    更多FMK 的还是看万一的吧
    Custom Grid Columns
    样式和说明文档
    LiveBindings --- 把对象之间的属性绑定起来
    LiveBindings如何绑定一个对象(转)
    Delphi LiveBinds组件
    记录一偏,因为我不会翻译,
    Delphi XE4 For IOS之部署问题
    Delphi XE5 android 捕获几个事件
  • 原文地址:https://www.cnblogs.com/yundan/p/4110010.html
Copyright © 2011-2022 走看看