`

Strategy模式

 
阅读更多

一、Strategy模式的意图:

策略操作定义了策略的输入和输出,而把策略的实现工作留给了各个类。这些类以不同的方案来实现同一操作,它们为用户提供统一的接口,因而这些类可以相互替换。

Strategy模式允许多种策略共存,而代码不会混乱。策略模式也可以实现模式选择逻辑和策略本身相分离。

Strategy模式的意图在于把可选的策略或方案封装在不同的类中 ,并在这些类中实现一个共同的操作

二、Strategy模式的例子:

·抽象父类:

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;

}

·继承子类:
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;
  }

}

三、Strategy模式的特点:

·有一个抽象的父类/接口,在其中定义了操作的模板(类似于Template模式)
·有一至多个实现类或子类,实现了父类/接口中的模板方法
·有 一个可供客户端动态切换算法的帮助类,该类拥有一个策略对象,可以在初始化时指定默认的策略,也可以在运行时通过set方法动态切换策略

四、Strategy模式与其它模式的比较:

·Strage模式与State模式的比较

在对状态进行建模时,状态的迁移是一个重要的方面(即如何切换到上、下一个状态);而在对策略进行建模时,迁移与策略的选择并不相关 (即关注的是操作的策略,对象状态的切换并不是关注的方面)。

另外一个不同之处就是,Strategy模式可能允许客户选择或者提供一个策略,而State模式却很少设计这样的思路。

·Strategy模式与Template模式的比较

Strategy模式的最大特点是可以在运行期间动态地切换算法。这一点和“Template”模式有点不同,后者虽然也提供抽象的模板框架,并且由子类继承实现,Template模式一般在确定之后的运行期间就不会再次切换了。而前者可以或者说需要在运行期间动态地切换

五、Strategy模式的适用场合:

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

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

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

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

分享到:
评论

相关推荐

    strategy模式实例

    实验一 Strategy模式的应用 某公司专门销售各种打印机,销售打印机时都有一定的折扣让利给顾客,但折扣计算的方法有很多种,如:不打折;每台减扣固定的金额;按售价的5%打折等等,且折扣计算方法可能发生变化。...

    设计模式-Strategy模式

    Strategy模式是一种行为设计模式,它使你能在运行时改变对象的行为。这种模式的核心思想是将算法族封装在独立的对象中,使得它们可以互换使用,让算法的变化独立于使用算法的客户。 在上述的国际电子商务系统案例中...

    设计模式之Strategy模式和代码实现

    Strategy模式是一种设计模式,主要目的是为了在运行时动态地改变对象的行为。在本文中,我们将通过一个奇幻角色扮演游戏(RPG)的例子来解释这个模式,以便更好地理解其工作原理。 在RPG游戏中,我们有四种角色:...

    strategy模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 在策略模式中,我们创建表示各种策略的对象和一个行为根据...

    一个strategy模式的例子.rar_strategy_设计模式

    在“一个strategy模式的例子.rar_strategy_设计模式”这个压缩包中,包含了两个关键文件,一个是“www.pudn.com.txt”,可能是相关资料链接或介绍,另一个是“strategy”,可能是一个具体的策略模式实现代码。...

    设计模式Strategy模式

    Strategy模式封装算法。如果有多个算法可以互换使用,Strategy比较合适。 Bridge模式是对抽象和具体的进一步抽象。

    java的Strategy模式设计应用--小型电子商务系统简单模拟

    在软件设计领域,Strategy模式是一种行为设计模式,它使你能在运行时改变对象的行为。Java作为面向对象编程语言,提供了丰富的特性支持这一模式的应用。在这个小型电子商务系统简单模拟项目中,我们利用Strategy模式...

    C++ Strategy模式

    Strategy模式是设计模式中的一种行为模式,它允许在运行时动态地改变对象的行为。这种模式的核心思想是定义一系列算法,并将每一个算法封装起来,使它们可以相互替换,让算法的变化独立于使用算法的客户。在C++中...

    策略(strategy)模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 在策略模式中,我们创建表示各种策略的对象和一个行为根据...

    设计模式精解-GoF 23 种设计模式解析附 C++实现源码 单最常用的设计模式入门,比如AbstractFactory模式、Adapater模式、Composite模式、Decorator模式、Factory模式、Observer模式、Strategy模式、Template模式等

    设计模式体现的是一种思想,而思想则是指导行为的一切,理解和掌握了设计模式,并不是说记住了23种(或更多)设计场景和解决策略(实际上这也是很重要的一笔财富),实际接受的是一种思想的熏陶和洗礼,等这种思想...

    Java设计模式之Strategy模式

    Strategy模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,Strategy模式的核心思想是定义一系列算法,并将每一个算法封装起来,使它们可以互相替换,让算法独立于使用它的客户而变化。 在给出的...

    第3讲_strategy模式

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在上述的"打印机销售折扣计算"问题中,策略模式能很好地解决需求变化带来的挑战。通过策略模式,我们可以将每种折扣计算方法封装为一个独立的类,这些...

    Strategy设计模式范例

    Strategy模式提供了一种将算法族封装到各自独立的对象中,使得它们可以互换使用的方法。这样,我们可以避免硬编码特定的算法,而是让代码更加灵活,易于扩展。 在本范例中,我们将重点讨论如何应用Strategy模式来...

    邮寄收费系统 strategy模式运用

    设计一个邮寄包裹的收费系统,在邮寄类型确定的情况下,包裹的邮资由包裹的重量a,邮寄距离b,保价金额c三个参数决定。系统使用图形用户界面,用户在图形用户界面选择邮寄类型,再输入重量、距离和报价金额,单击...

    Strategy 模式 JAVA

    **策略模式(Strategy Pattern)**是面向对象设计模式中的一种行为模式,它允许在运行时改变对象的行为。在Java编程中,策略模式被广泛应用于处理算法的可互换性问题,使得程序能够根据不同的环境或者需求选择合适的...

    设计模式之_Strategy_00_源码与文档.rar

    这个压缩包文件“设计模式之_Strategy_00_源码与文档.rar”包含了关于Strategy模式的源码实现和相关文档,便于深入理解和学习。 Strategy模式的核心思想是定义一系列算法,并将每一个算法封装起来,使它们可以相互...

    java设计模式之Strategy.docx

    Java设计模式中的Strategy模式是一种对象行为型模式,其主要目的是定义一系列算法,并将这些算法封装成独立的类,使得它们可以互相替换,让算法的变化独立于使用算法的客户。在Strategy模式中,核心思想是封装可能...

Global site tag (gtag.js) - Google Analytics