設計模式之Strategy(策略)

原创 2004年06月24日 20:10:00

Strategy是屬於設計模式中 物件行爲型模式,主要是定義一系列的演算法,把這些演算法一個個封裝成單獨的類別。

Stratrgy應用比較廣泛,比如, 公司經營業務變化圖, 可能有兩種實現方式,一個是線條曲線,一個是框圖(bar),這是兩種演算法,可以使用Strategy實現。

這裏以字串替代爲例, 有一個文件,我們需要讀取後,希望替代其中相應的變數,然後輸出。關於替代其中變數的方法可能有多種方法,這取決於用戶的要求,所以我們要準備幾套變數字元替代方案。

Strategy.jpg

首先,我們建立一個抽象類別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{

  //replaceFirstjdk1.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 test{

......

  public void testReplace(){

    //使用第一套方案進行替換。
    RepTempRule rule=new RepTempRuleOne();
    
rule.setOldString(record);
    rule.replace();

  }

.....

}

實際整個Strategy的核心部分就是抽象類別的使用,使用Strategy模式可以在用戶需要變化時,修改量很少,而且快速。

StrategyFactory有一定的類似,Strategy相對簡單容易理解。

Strategy適合下列場合:

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

2.以不同的演算法壓縮文件;

3.以不同的演算法截獲圖像;

4.以不同的格式輸出同樣資料的圖形,比如曲線 或框圖bar

 

首先,我們建立一個抽象類別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{

  //replaceFirstjdk1.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 test{

......

  public void testReplace(){

    //使用第一套方案進行替換。
    RepTempRule rule=new RepTempRuleOne();
    
rule.setOldString(record);
    rule.replace();

  }

.....

}

實際整個Strategy的核心部分就是抽象類別的使用,使用Strategy模式可以在用戶需要變化時,修改量很少,而且快速。

StrategyFactory有一定的類似,Strategy相對簡單容易理解。

Strategy適合下列場合:

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

2.以不同的演算法壓縮文件;

3.以不同的演算法截獲圖像;

4.以不同的格式輸出同樣資料的圖形,比如曲線 或框圖bar

設計模式之Strategy(策略)

Strategy是屬於設計模式中 物件行爲型模式,主要是定義一系列的演算法,把這些演算法一個個封裝成單獨的類別。Stratrgy應用比較廣泛,比如, 公司經營業務變化圖, 可能有兩種實現方式,一個是線...
  • alex197963
  • alex197963
  • 2007年05月12日 09:17
  • 609

设计模式之策略(Strategy)模式

Strategy模式是一种行为型设计模式,它将算法一个个封装起来,在某一时刻能够互换地使用其中的一个算法。从概念上看,所有这些算法完成的都是相同的工作,只是实现不同而已。动机在开发中,我们常常会遇到概...
  • lihao21
  • lihao21
  • 2015年08月26日 19:51
  • 2173

Strategy策略模式和State/Bridge模式的区别

Strategy策略模式 如果系统中某个类的某一行为存在多种实现方式,而且这些实现方式可以互换时使用策略模式。 如果系统中某个类的对象存在多种状态,不同状态下行为有差异,而且这些状态之间可以发生转换...
  • Blues1021
  • Blues1021
  • 2015年09月12日 00:26
  • 999

我所理解的设计模式(C++实现)——策略模式(Strategy Pattern)

每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。 而策略模式就是对算法进行包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通...
  • LCL_data
  • LCL_data
  • 2013年08月24日 10:59
  • 12926

设计模式--深度解析策略模式(Strategy Pattern)

前些天网购一本Head First Design Patterns,学习了一下,觉得写的挺好,而且挺有趣的,推荐大家都去买一本,真心不错。在这里我先讲一下,这两天学的,两个常见的设计模式,分别Stra...
  • qq_29282475
  • qq_29282475
  • 2015年12月04日 14:17
  • 3556

设计模式之——桥接(Bridge)和策略(strategy)

之所以把这两个放在一起,是因为他们很相似,但又是完全不同的 先来看看Bridge模式 1)如果客户给了一个需求,故我们实现了类A 2)过了几天客户说这个东东需要有两种算法,故我们派生...
  • wind19
  • wind19
  • 2011年08月09日 18:03
  • 1383

设计模式之策略Strategy模式

Strategy模式是定义一系列算法,把这些算法定义成一个新的类,
  • shuijieshuijie
  • shuijieshuijie
  • 2014年07月29日 14:05
  • 387

设计模式之策略(strategy)模式

#include "stdafx.h" #include using namespace std; //策略模式封装了变化。 // 策略模式就是用来封装算法的,但是在实践中,我们发现可以可以...
  • yhhwatl
  • yhhwatl
  • 2013年07月02日 13:52
  • 590

设计模式之策略(Strategy)模式

别名 政策(Policy) 模式 定义 Define a family of algorithms, encapsulate each one, and make them interc...
  • luoxin1992
  • luoxin1992
  • 2016年04月11日 21:15
  • 101

策略(Strategy)模式

对象可能经常需要使用多不同的算发,但是如果变化频繁,会将类型变得脆弱...1、动机在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且...
  • bendan999999999
  • bendan999999999
  • 2007年08月02日 14:23
  • 329
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:設計模式之Strategy(策略)
举报原因:
原因补充:

(最多只允许输入30个字)