java设计模式之策略模式

         策略模式就是定义了很多算法的方法,这些方法有着相同的返回,只是实现的算法不一样。这样在抽象方法或者接口中抽出相同的方法,在具体的策略方法中实现不同的策略算法,再由一个策略的控制类,对这些算法进行不同的调度。根据以上描述,我们用策略模式重新写之前简单工厂模式的实现。

 

首先定义策略接口StrategyInterface:

 

public interface StrategyInterface {

         publicString getKey();

}

然后,定义不同的策略实现Coder,Geek,Hacker

 

public class Coder implementsStrategyInterface{

         @Override

         publicString getKey() {

                   return"this is coder";

         }

}

public class Geek implements StrategyInterface{

         @Override

         publicString getKey() {

                   return"this is Geek";

         }

}

public class Hacker implementsStrategyInterface{

         @Override

         publicString getKey() {

                   return"this is hacker";

         }

}

 

最后写策略的控制类,策略的控制类包含一个策略对象的引用,用来调用不同的策略实现

public class StrategyControl {

         privateStrategyInterface strategyInterface;

         publicStrategyControl(StrategyInterface strategyInterface) {

                   super();

                   this.strategyInterface= strategyInterface;

         }

         publicString getKey(){

                   returnthis.strategyInterface.getKey();

         }

}

当客户端调用时,只需要调用策略控制类的方法即可,如果需要添加策略,只需要新增一个策略实现类即可,不需要修改客户端和控制类的代码。

编写客户端的测试代码:

public class StrategyTest {

         publicstatic void main(String[] args) {

                   StrategyInterfacesi = new Coder();

                   StrategyControlsc = new StrategyControl(si);

                   Stringkey = sc.getKey();

                   System.out.println(key);

         }

}

输出结果如下:


策略模式的优点:

         策略模式提供了管理相关算法的方法,使用策略模式可以将公共代码移到父类中,避免编写重复的代码,客户端调用时也不需要做if判断。

策略模式的缺点:

         使用策略模式时,客户端需要知道所有的策略,来决定到底使用哪一种策略。当策略非常多时,需要建立很多的策略实现类。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值