策略模式(Strategy)-定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

本文介绍策略模式的概念及其在软件设计中的应用。通过一个示例详细解释了如何将不同的算法封装成独立的类,并允许这些类相互替换,使得算法可以在不改变客户端的情况下变化。包括抽象类的定义、具体策略实现及客户端调用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

策略模式:策略模式针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。策略模式把行为和环境分开。环境类负责维持和查询行为类,各种算法在具体的策略类中提供。由于算法和环境独立开来,算法的增减,修改都不会影响 到环境和客户端。

 

(1)建立一个抽象类RepTempRule 定义一些公用变量和方法,示例代码如下:
public abstract class RepTempRule{

    protected String oldString="";
    public void setOldString(String oldString){
      this.oldString=oldString;
    }

    protected String newString="";
    public String getNewString(){
      return newString;
    }

    public abstract void replace() throws Exception;

}


(2)有一个抽象方法abstract需要继承明确,这个replace里其实是替代的具体方法,示例代码如下:

public class RepTempRuleOne extends RepTempRule{

    public void replace() throws Exception{
       newString=oldString.replaceFirst("aaa", "bbbb")
      System.out.println("this is replace one");
    }
}

 

public class RepTempRuleTwo extends RepTempRule{


    public void replace() throws Exception{
      newString=oldString.replaceFirst("aaa", "ccc")
      System.out.println("this is replace Two");
    }
}

 

 

(3)我们要建立一个算法解决类,用来提供客户端可以自由选择算法。示例代码如下:
public class RepTempRuleSolve {

  private RepTempRule strategy;

  public RepTempRuleSolve(RepTempRule rule){
    this.strategy=rule;
  }

  public String getNewContext(Site site,String oldString) {
    return strategy.replace(site,oldString);
  }

  public void changeAlgorithm(RepTempRule newAlgorithm) {
    strategy = newAlgorithm;
  }

}

 

(4)测试。示例代码如下:

public class StrategyTest {
    public static void main(String[] args) throws Exception {
        RepTempRuleSolve solver = new RepTempRuleSolve(new RepTempRuleOne());
        System.out.println(solver.getNewContext("", "aaabbbaaa"));
        solver.changeAlgorithm(new RepTempRuleTwo());
        System.out.println(solver.getNewContext("", "aaabbbaaa"));

    }

}


示例代码转自:http://www.jdon.com/designpatterns/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值