`
roruby
  • 浏览: 334996 次
  • 来自: ...
社区版块
存档分类
最新评论

設計模式之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{

  //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 策略模式

    C#面向对象设计模式 (行为型模式) Strategy 策略模式 视频讲座下载

    设计模式C++学习之策略模式(Strategy)

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在C++中,策略模式通常通过定义一系列算法类并让它们之间可以互换来实现。这些算法类都实现了一个公共接口,使得它们可以被相同的客户端代码调用,而...

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

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或时间点执行不同算法的情况。策略模式提供了一种灵活的方式来处理这种情况,通过将每种算法封装为一个...

    C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在C#中,策略模式经常被用来解决复杂的问题,特别是在需要动态切换算法或行为的场景下。它通过将算法封装到具有独立接口的类中,使得算法可以互相替换...

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

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件设计中,我们经常遇到需要在不同时间或根据不同条件使用不同算法的情况。策略模式允许我们将算法封装到独立的可互换的策略类中,从而使它们可以...

    设计模式之策略模式 鸭子问题

    设计模式之策略模式 鸭子问题 策略模式是一种经典的设计模式,通过鸭子问题,可以让学习者更好地了解设计模式的概念和实现。策略模式的主要思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换。...

    [行为模式] head first 设计模式之策略模式(strategy)

    《行为模式:Head First 设计模式中的策略模式》 策略模式是设计模式中的一种行为模式,它使我们能够在运行时改变对象的行为。在面向对象设计中,策略模式提供了一种方式来封装一系列算法,并使它们可以互相替换,...

    设计模式 之 “策略模式[Strategy Pattern]”

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或时间点执行不同算法的情况。策略模式提供了一种将算法族封装到各自独立的类中,并让它们之间可以互相...

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

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。这种模式允许你使用算法族,而无需在代码中硬编码这些算法。通过将算法封装到具有共同接口的独立对象中,策略模式使得你可以根据需要灵活地切换算法,...

    Java 设计模式-策略模式(Strategy)Android讲解

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式是通过定义一系列算法,并将每个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户而变化。这种模式在Android开发中...

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

    这份文档讲诉了设计模式之策略(Strategy)模式,希望可以帮助学习的人!

    JAVA设计模式chm文档

    创建模式: 设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) ...设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor

    Java设计模式 设计模式介绍

    2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之Observer 9、设计模式之Strategy(策略) 10、设计模式之...

    【Java设计模式】(2)策略模式Strategy

    策略模式(Strategy)是软件设计模式中的一种行为模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常涉及定义一系列算法,并将每个算法封装起来,使得它们可以相互替换,同时使得算法的变化独立于使用它...

Global site tag (gtag.js) - Google Analytics