登陆 |  注册  |  我的客厅  |  我的圈子  |  管理中心  | 
厅主简介: 1212
布谷首页 > 客厅 > ghost > 日志
标签: 设计模式 策略模式
发布时间:2006.10.11 13:52
设计模式之Strategy(策略)

Strategy策略模式是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类.

Stratrgy应用比较广泛,比如, 公司经营业务变化图, 可能有两种实现方式,一个是线条曲线,一个是框图(bar),这是两种算法,可以使用Strategy实现.

这里以字符串替代为例, 有一个文件,我们需要读取后,希望替代其中相应的变量,然后输出.关于替代其中变量的方法可能有多种方法,这取决于用户的要求,所以我们要准备几套变量字符替代方案.

 

首先,我们建立一个抽象类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;


}

在RepTempRule中 有一个抽象方法abstract需要继承明确,这个replace里其实是替代的具体方法.
我们现在有两个字符替代方案,
1.将文本中aaa替代成bbb;
2.将文本中aaa替代成ccc;

对应的类分别是RepTempRuleOne RepTempRuleTwo

public class RepTempRuleOne extends RepTempRule{


public void replace() throws Exception{

  //replaceFirst是jdk1.4新特性
  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");
  
}


}

第二步:我们要建立一个算法解决类,用来提供客户端可以自由选择算法。

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;
  }

}

 

 

调用如下:

public class test{

......

  public void testReplace(){

  //使用第一套替代方案
  RepTempRuleSolve solver=new RepTempRuleSolve(new RepTempRuleSimple());
  solver.getNewContext(site,context);

  //使用第二套

  solver=new RepTempRuleSolve(new RepTempRuleTwo());
  solver.getNewContext(site,context);

 

  }

.....

}

我们达到了在运行期间,可以自由切换算法的目的。

实际整个Strategy的核心部分就是抽象类的使用,使用Strategy模式可以在用户需要变化时,修改量很少,而且快速.

Strategy和Factory有一定的类似,Strategy相对简单容易理解,并且可以在运行时刻自由切换。Factory重点是用来创建对象。

Strategy适合下列场合:

1.以不同的格式保存文件;

2.以不同的算法压缩文件;

3.以不同的算法截获图象;

4.以不同的格式输出同样数据的图形,比如曲线 或框图bar等

 
人推荐
 
浏览(91) | 评论(0)
上一篇:设计模式之Proxy(代理)
下一篇:整体操作
精彩评论
正在请求评论列表....
 
 
 发表评论
 
昵称: 注册 | 登录    
 
 
 
 厅主信息
年龄:2    职业:保密
积分:9   布谷蛋
个性签名:
     无
  
 
布谷客厅推荐   更多  
爱上自由的我
帅哥和美狗
 
厅主最新日志   更多  
暂无相关信息
 
美图欣赏推荐   更多  
恋人蜜语
郎才女貌
 
原创大赛作品   更多  
·老人——(我慈祥的 ·我们仨儿
·只是如此 ·雨幕
·我的灵魂 ·千古爱情
·狂傲吟 ·
·父亲之歌 ·我的灵魂
 
布谷相册推荐   更多  
若有所思若有所失
迷人花香迷人帅
 
精彩日志推荐   更多  
·这个冬天有些冷 ·瞬间美丽,瞬间逃匿。
·为爱做一个哑巴 ·珍惜生命中的十种人
·有才华的人会失败? ·谁是真正的庄家
·温暖的力量 ·好床伴的标准是什么?
·职场巧言保你不败! ·人生自是有情痴
 
布谷圈子推荐   更多  
羊城花园小区
丽都国际
 
原创日志推荐   更多  
·职场女性的八大“怕” ·上帝只掌握一半
·希望无敌 ·信念提升人生价值
·读一种安静的文字 ·生活,需要一种勇气
·谁会温暖我的手。 ·男欢女爱
·那无处安放的青春 ·一抬头间的落寞。
 
圈子热图推荐   更多  
林心如甜美的样子
成熟的男人
 
热门话题推荐   更多  
·断网能治本吗? ·什么是社会保险?
·孩子学坏很快 ·木家具≠绿色家具
·冬季人们怎么保健? ·网上购物如何选择?
·四大理财新观念 ·怎样为独生子女存款?
·沉迷网络易患抑郁 ·冬季更适合恋爱?

关于布谷 | 联系我们 | 友情链接 | 布谷帮助 | 免责声明 | 网站地图
广州亿码科技有限公司版权所有◎2000-2008    粤B2-20050444    网络实名:布谷    服务热线(9:00-18:00):020-38480358-1020  简化1  简化2