Strategy(策略)

中心思想:
      把变化的部分和不变的部分隔离开来。用接口来“抽取”
出来。

实现:

实际整个Strategy的核心部分就是抽象类的使用,【可以用接口,】(用抽象类声明对象变量引用不同的子类对象)使用Strategy模式可以在用户需要变化时,修改量很少,而且快速.

Strategy 适合下列场合:

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

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

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

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



具体操作步骤:
   

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


1,我们建立一个抽象类RepTempRule定义一些公用变量和方法:

 1 public   abstract   class  RepTempRule {
 2
 3 protected  String oldString = "" ;
 4 public   void  setOldString(String oldString) {
 5    this .oldString = oldString; 
 6 }

 7
 8 protected  String newString = "" ;
 9 public  String getNewString() {
10    return  newString;
11 }

12 // 以上是公共变量和方法
13 public   abstract   void  replace()  throws  Exception;
14
15 }

RepTempRule中有一个抽象方法abstract需要继承明确,这个replace()里其实是替代的具体方法.

2,两种方案的实现类,实现抽象方法replace() 
public class RepTempRuleTwo extends RepTempRule
public class RepTempRuleOne extends RepTempRule


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

 

 1 public   class  RepTempRuleSolve 
 2
 3 private  RepTempRule strategy;  // 抽象类不可以生成对象,但是可以生成对象变量,去引用已经实现抽象方法的子类
 4
 5    public  RepTempRuleSolve(RepTempRule rule) {
 6      this .strategy = rule;
 7   }

 8
 9
10
11    public  String getNewContext(Site site,String oldString)  {
12      return  strategy.replace(site,oldString);
13   }

14
15    public   void  changeAlgorithm(RepTempRule newAlgorithm)  {   // 通过该方法动态改变strategy
16     strategy  =  newAlgorithm;
17
18 }

19

 


4,程序中使用。可以方便的切换实现方案。

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

  //使用第二套

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




 

posted on 2009-04-11 01:35 luofeng225 阅读(180) 评论(0)  编辑  收藏 所属分类: 设计模式


只有注册用户登录后才能发表评论。


网站导航:
 
<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

导航

统计

公告

我曾经听到这么一个故事: 一个年轻的程序员问一个老程序员(一个比较牛逼的公司的CTO) 年轻程序员: 你为什么这么牛X., 就好像没有你不会的。老程序员: 积累的。年轻程序员: 怎么才能积累到您的程度呢。我每天都在积累。但是似乎都没有感觉到进步。老程序员: 我从20岁开始做到了一件事情,直到今天,而且尽可能地保证不间断。年轻程序员: 到底是什么? 老程序员: 我每天保证自己有2个小时在学习新的东西。

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

相册

收藏夹

Java Website

java技术博客

搜索

最新评论

阅读排行榜

评论排行榜