Java设计模式之策略模式

来源:互联网 发布:bf是什么意思淘宝 编辑:程序博客网 时间:2024/06/07 18:14

转发请注明原文:http://blog.csdn.net/qq_34911465/article/details/64123687

策略模式

策略模式,从名字上我们看不出什么。不就是策略吗,策略被我们理解为算法的话,那么策略怎么能算是一种模式呢。但是在看了策略模式的资料后,我们可以把它抽象出来,所谓的策略,就是解决问题的方法,解决一个问题有多种方法,我们具体要使用何种方法来解决问题呢,那么就是策略了。抽象的讲,一个策略解决多种问题,我们也不关心这是什么策略,我们只把它叫做策略A,下次又有其他的策略可以解决相同的问题或者不同的问题,我们把新的策略叫做策略B。这就是策略模式的大体内容了吧。
然后我们可以写出抽象的类接口:

public interface Strategy{  public void algorithmInterface(int num);}

然后我们在不同的子类中完成这个接口的方法,就可以完成不同的策略了。这里以判断数字的奇偶为例,如下:

//偶数的策略public class EvenStrategy implements Strategy{  public void algorithmInterface(int num){    System.out.println(""+num+" is even number");  }}
//奇数的策略public class OddStrategy implements Strategy{  public void algorithmInterface(int num){    System.out.println(""+num+" is odd number");  }}

然后我们在一个具体的实现类中使用这些接口来进行操作,就可以使用对实现类中相同的数据成员使用不同的操作了。如下:

public class Context{  private Strategy strategy;  private int num;  public Context(){    this.strategy = null;  }  public Context(Strategy strategy){    this.strategy = strategy;  }  public void setStrategy(Strategy strategy){    this.strategy = strategy;  }  public void setStrategy(int num){    this.num = num;    if(num%2==0)strategy = new EvenStrategy();    else strategy = new OddStrategy();  }  public void show(){    strategy.algorithmInterface(num);  }  public static void main(String[] args){    Context context = new Context();    EvenStrategy eStrategy = new EvenStrategy();    OddStrategy oStrategy = new OddStrategy();    Scanner sc = new Scanner(System.in);    int n;    System.out.println("Please input some number");    while(sc.hasNextInt()){      n = sc.nextInt();      context.setStrategy(n);      context.show();    }  }}

如上所示,我们使用策略模式来编写程序,那么就可以方便的扩展程序来应对不同的实现。
策略模式的主要特点:有助于类的解耦合吧,实现类中不需管理如何操作类成员,而由抽象策略类的子类来对成员进行操作,这样在程序维护的时候,我们可以只对实现类进行增添修改,也可以只对策略类以及子类进行修改,这样就将数据和逻辑分离开来。

0 0
原创粉丝点击