浅谈Java与策略模式

1:所谓策略模式就是把算法定义的一组算法封装,把调用与实现分开,在客户端(测试类)中调用它们的时候相互之间不发生影响。它的基础就是多态。

2:策略模式的意义:

策略模式提供了许多可替换的部分组成的软件,并且各个部分之间是弱连接的关系。

弱连接的特性使软件具有更强的可扩展性,易于维护;更重要的是,它大大提高了软件的可重用性。

3:策略模式的组成:

1:抽象的策略角色抽象的策略角色可以设置为一个接口;

2:具体的策略角色,实现上面的接口,定义要实现的方法;

3:环境角色,环境角色中拥有一个抽象策略角色的引用;

4:客户端(测试类),生成具体策略角色与环境角色的对象。

好吧,也许上面说的太含蓄了,其实就是把1定义为一个接口,然后2为实现了接口的n个类,3的话就是定义一个1的引用,用1的引用在被赋予意义后调用2中的若干个方法,然后4嘛,就是生成一个2(其实是2中某个类的)和3的对象,就行了。

4:具体实现:

实现一个加减乘除的方法。

1:抽象的策略角色

package com.sunyonggang;

 

publicinterfaceStrategy  //抽象角色

{

   int calcu(int i, int j);

}

2:具体的策略角色

package com.sunyonggang;

 

publicclassAddStrategy implements Strategy  //实现加法的角色

{

   publicint calcu(int i, int j)

   {

      return i+j;

   }

}

 

package com.sunyonggang;

 

publicclassSubstractStrategy implements Strategy  //实现减法的角色

{

   publicint calcu(int i, int j)

   {

      return i-j;

   }

}

 

 

package com.sunyonggang;

 

publicclassMultiplyStrategy implements Strategy //实现乘法的角色

{

   publicint calcu(int i, int j)

   {

      return i*j;

   }

}

 

package com.sunyonggang;

 

publicclassDivideStrategy implements Strategy  //实现除法的角色

{

   publicint calcu(int i, int j)

   {

      if(j == 0)return 0; //如果j=0,那么就返回0

      return i/j;

   }

}

 

3:环境角色

package com.sunyonggang;

 

publicclassEnvironmentStrategy   //环境角色

{

   private Strategy strategy;

   publicEnvironmentStrategy(Strategy s)

   {

      strategy = s;

   }

   public Strategy getStrategy()

   {

      returnstrategy;

   }

   publicvoid setStrategy(Strategystrategy)

   {

      this.strategy = strategy;

   }

   publicint what(int i, int j)

   {

      returnstrategy.calcu(i, j);

   }

}

4:客户端(测试类)

package com.sunyonggang;

 

publicclassStrategyTest    //测试类

{

   publicstaticvoid main(String[] args)

   {

      int i = 3;

      int j = 4;

      Strategys = newAddStrategy();  //计算i+j的和

      EnvironmentStrategye = newEnvironmentStrategy(s);

      System.out.println(e.what(i, j));

     

      Strategys2 = newSubstractStrategy(); //计算i+j的差

      e.setStrategy(s2);

      System.out.println(e.what(i, j));

     

      Strategys3 = newMultiplyStrategy(); //计算i+j的积

      e.setStrategy(s3);

      System.out.println(e.what(i, j));

     

      Strategys4 = newDivideStrategy(); //计算i+j的商

      e.setStrategy(s4);

      System.out.println(e.what(i, j));

  

}

5策略模式的缺点:

1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类。

2.造成很多的策略类。

6参考资料

北京圣思圆javaSE第51讲;

Csdn博客:http://blog.csdn.net/surprisesdu/article/details/636951


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值