Java设计模式之策略模式原理与用法实例详解

  

本文实例讲述了Java设计模式之策略模式原理与用法。分享给大家供大家参考,具体如下:

  

策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。其JDK中里面的TreeSet类和TreeMap类就用到了策略模式。这两个类是带排序的集合类,其中排序的规则就相当于策略模式里定义的一系列算法,而集合类就相当于是策略模式里的环境类,供用户使用,用只知道TreeSet和TreeMap是带排序的,至于怎么排序的,是由排序的算法决定的。

  

  

:策略类,通常由一个接口或者抽象类实现。

  

:实现了抽象策略类,并包装了相关的算法和行为。

  

:持有一个策略类的引用,最终给客户端调用。

  

下面提供一个简单的策略模式的代码实例:

  

<强> 1。抽象策略角色:定义一个接口策略。

        包com.test;/* *   *策略模式抽象角色   * @author zhouwen   *   */公共接口策略{   公共int计算(int, int b);   }      之前      

<强> 2。具体策略角色:实现策略接口。例子中是实现加减乘除的运算。

        包com.test;/* *   *策略模式具体策略类   *实现加法运算   * @author zhouwen   *   */公共类AddStrategy实现策略{   @Override   公共int计算(int, int b) {   返回一个+ b;   }   }      之前            包com.test;/* *   *策略模式具体策略类   *实现减法运算   * @author zhouwen   *   */公共类SubtractStrategy实现策略{   @Override   公共int计算(int, int b) {   返回一个- b;   }   }      之前            包com.test;/* *   *策略模式具体策略类   *实现乘法运算   * @author zhouwen   *   */公共类MultiplyStragety实现策略{   @Override   公共int计算(int, int b) {   返回一个* b;   }   }      之前            包com.test;/* *   *策略模式具体策略类   *实现除法运算   * @author zhouwen   *   */公共类DivideStrategy实现策略{   @Override   公共int计算(int, int b) {   返回a/b;   }   }      之前      

<强> 3。环境角色:在环境角色中定义一个抽象角色的引用,并暴露出计算的方法,供客户端调用。

        包com.test;/* *   *策略模式环境类   * @author zhouwen   *   */公共类环境{   私人战略策略;   公共环境(战略策略){   这一点。策略=策略;   }//用以改变策略   公共空间setStrategy(战略策略){   这一点。策略=策略;   }   公共策略getStrategy () {   回报策略;   }//暴露计算的接口,供客户端调用   公共int计算(int, int b) {   回报策略。计算(a, b);   }   }      之前      

<>强4。最后编写客户端的代码:

        包com.test;   公共类客户{   公共静态void main (String [] args) {   AddStrategy AddStrategy=new AddStrategy ();   环境环境=新环境(addStrategy);   System.out.println(环境。计算(3,4));   SubtractStrategy subStrategy=new SubtractStrategy ();   environment.setStrategy (subStrategy);   System.out.println(环境。计算(3,4));   MultiplyStragety multiplyStrategy=new MultiplyStragety ();   environment.setStrategy (multiplyStrategy);   System.out.println(环境。计算(3,4));   DivideStrategy DivideStrategy=new DivideStrategy ();   environment.setStrategy (divideStrategy);   System.out.println(环境。计算(3,4));   }   }      之前      

  

由客户端的<代码> System.out.println(环境。计算(3,4));这句代码,我们并不知道具体调用的是哪个实现类,只有知道了传给环境角色的具体策略类我们才知道调用哪个类,这样就能实现客户端和具体策略算法的分离,使程序易于切换,易于理解,易于扩展。

  

  

<>强优点:

  

1。策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得他们可以相互替换。如提供的例子中通过集方法对策略进行替换。

  

Java设计模式之策略模式原理与用法实例详解