Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1589795
  • 博文数量: 43
  • 博客积分: 169
  • 博客等级: 入伍新兵
  • 技术积分: 1162
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-08 15:35
文章分类

全部博文(43)

文章存档

2021年(1)

2019年(4)

2016年(6)

2015年(8)

2013年(19)

2012年(5)

分类: Java

2013-03-17 15:34:53

策略模式


    策略模式的宗旨:创建一个能够根据所传递的参数对象的不同而具有不同行为的方法,这类方法包含所要执行的算法固定不变的部分,而“策略”包含变化的部分。如下例:
   //以乐器发音为例
  /**
   *  定义一个乐器类
    */
    abstract  class Instrument
   {
          public abstract void tune();
   }
   /**
   * 定义一个弦乐器
   */
   class StringedInstrument extends Instrument
   {
          public void tune()
          {
               System.out.println("the sound of stringed instrument");
          }
    }
    /**
      * 管制乐器
      */
    class BrassInstrument extends Instrument
   {
       public void tune()
     {
         System.out.println("the sound of brass instrument");
     }
   }
    public class StrategyPattern
    {
        public static void tune(Instrument instrument)
        {
            instrument.tune();
        }
        public static void main(String[] args) {
            StrategyPattern.tune(new StringedInstrument());
            StrategyPattern.tune(new BrassInstrument());
        }
    }
   //上面例子中的策略则是BrassInstrument 和 StringedInstrument 
   所以说,策略设计模式的理念为以不变(StrategyPattern类中的tune 方法内的固定算法)应对万变的策略(传入方法的参数),故策略模式比较适合变化多,用来调节、实现可能来自不同方向需求,对于不同算法策略的统一处理,做到以不变应万变。
  同样可以打一个比方:策略模式的运作方式就好比浏览器处理报文一样,不论你是来自任何网站,任何系统,任何语言开发的,浏览器都不会去关心,比如说  jsp系统和php系统,在浏览器上打开时,不论事先在不同系统中做了什么样处理、数据格式是什么样的,接受到的所有报文最终都将统一处理,最后显示在浏览器界面上。
   这就是策略模式,解释的比较简单,还望见谅,如有高见,非常非常愿意聆听见解,请留言~~~

阅读(1940) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~