`
jtlyuan
  • 浏览: 66755 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

策略模式--Strategy

 
阅读更多


 策略模式的目的是定义一系列算法,把它们封装起来,并且使它们可以相互替换.
本模式使得算法可以独立于它的客户而变话.



 
  1. /**  
  2.  * 抽象策略(Strategy)角色  
  3.  * @author Salmon  
  4.  *  
  5.  */  
  6. public interface Strategy {   
  7.     public void algorithmInterface();   
  8. }   
  9.   
  10. /**  
  11.  * 具体策略(ConcreteStrategy)角色  
  12.  * @author Salmon  
  13.  *  
  14.  */  
  15. public class ConcreteStrategyA implements Strategy {   
  16.     public void algorithmInterface() {   
  17.         System.out.println("Called ConcreteStrategyA.algorithmInterface()");   
  18.     }   
  19. }   
  20.   
  21. /**  
  22.  * 具体策略(ConcreteStrategy)角色  
  23.  * @author Salmon  
  24.  *  
  25.  */  
  26. public class ConcreteStrategyB implements Strategy {   
  27.     public void algorithmInterface() {   
  28.         System.out.println("Called ConcreteStrategyB.algorithmInterface()");   
  29.     }   
  30. }   
  31.   
  32. /**  
  33.  * 具体策略(ConcreteStrategy)角色  
  34.  * @author Salmon  
  35.  *  
  36.  */  
  37. public class ConcreteStrategyC implements Strategy {   
  38.     public void algorithmInterface() {   
  39.         System.out.println("Called ConcreteStrategyC.algorithmInterface()");   
  40.     }   
  41. }   
  42.   
  43. /**  
  44.  * 环境(Context)角色  
  45.  * @author Salmon  
  46.  *  
  47.  */  
  48. public class Context {   
  49.     Strategy strategy;   
  50.   
  51.     public Context(Strategy strategy) {   
  52.         this.strategy = strategy;   
  53.     }   
  54.   
  55.     public void contextInterface() {   
  56.         strategy.algorithmInterface();   
  57.     }   
  58. }   
  59.   
  60. /**  
  61.  * 客户端代码  
  62.  * @author Salmon  
  63.  *   
  64.  */  
  65. public class Client {   
  66.     public static void Main(String[] args) {   
  67.         Context c = new Context(new ConcreteStrategyA());   
  68.         c.contextInterface();   
  69.   
  70.         Context d = new Context(new ConcreteStrategyB());   
  71.         d.contextInterface();   
  72.   
  73.         Context e = new Context(new ConcreteStrategyC());   
  74.         e.contextInterface();   
  75.     }   

 

 

应用场合:

1、多个类的分别只是在于行为的不同。

2、你需要对行为的算法做很多的变动。

3、客户不知道算法要使用的数据。

  • 大小: 9.6 KB
分享到:
评论

相关推荐

    人人都会设计模式---策略模式--Strategy

    【策略模式】是一种设计模式,它的核心思想是将不同的算法或行为封装成独立的类,这些类具有统一的接口,从而使客户端可以灵活地选择并使用其中的任何一种算法,而无需关心具体实现的细节。这种模式可以有效地避免...

    php设计模式-策略模式-例题学习

    策略模式是设计模式的一种,它允许我们在运行时动态地改变对象的行为。在这个"php设计模式-策略模式-例题学习"的例子中,我们将深入理解策略模式的运用及其在PHP中的实现。 首先,让我们来看看核心的类和接口: ...

    设计模式-策略模式-c++版

    void useStrategy() { strategy->execute(); } }; ``` 在提供的压缩包中,可能包含了实现上述概念的C++代码。源码文件可能会展示如何实例化上下文对象并根据需要切换策略,例如通过调用`setStrategy`方法。UML类图...

    设计模式专题之(十六)策略模式---设计模式策略模式示例代码(python--c++)

    _strategy->do_algorithm(data); } }; ``` 这里,`Strategy`是策略接口,`ConcreteStrategyA`和`ConcreteStrategyB`是具体策略类,它们都实现了`do_algorithm`方法。`Context`类持有`Strategy`的指针,并通过`...

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

    首先,策略模式由三个主要组成部分构成:上下文(Context)、策略(Strategy)接口和具体策略(Concrete Strategy)。上下文是使用策略的对象,它维护一个对策略的引用,并调用策略的接口来执行算法。策略接口定义了一组...

    3 策略模式-课程内容.rar

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件开发中,我们经常遇到需要根据不同的条件或时间点执行不同算法的情况。策略模式允许我们将算法封装到独立的策略类中,并在需要的时候动态选择...

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

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

    策略模式-电影订票程序

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在电影订票程序中,策略模式的应用能够灵活地处理不同的定价策略,比如普通票价、会员优惠价、节假日特惠等。通过这种方式,我们可以避免硬编码各种...

    c++设计模式-行为型模式-策略模式

    c++设计模式-行为型模式-策略模式;qt工程;c++简单源码; 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于...

    设计模式-Strategy模式

    在Strategy模式中,我们将每种算法封装为一个策略类,每个策略类都实现了同一接口或抽象类,这样确保所有策略具有相同的契约。在上述案例中,我们可以创建一个`TaxStrategy`接口,包含计算税额的方法,然后为每个...

    策略模式-基本代码.rar

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

    设计模式--策略模式java例子

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常用于替换硬编码的条件语句,使代码更加灵活、可扩展和易于维护。下面我们将详细探讨策略模式的核心概念、实现方式以及在实际...

    策略模式-java

    ### 策略模式-java #### 模式定义与背景 策略模式是一种行为设计模式,它使得算法可以独立于使用它的客户端而变化。简而言之,这种模式允许你在运行时改变对象的行为。策略模式的核心思想是将算法或者行为封装成一...

    3 策略模式-MOOC课程内容.pdf

    1. **策略(Strategy)**:这是策略模式中的一个核心概念,定义了算法家族,封装了算法或行为。策略接口必须是统一的,从而使得这些算法可以互相替换。 2. **具体策略(ConcreteStrategy)**:实现了一个策略接口的...

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

    void executeStrategy() { strategy->execute(); } }; ``` 上下文类不关心具体策略的实现,只关心如何调用策略。 4. **客户端代码(Client)**:客户端代码创建具体策略对象,并将其传递给上下文。例如,`main....

    策略(strategy)模式

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

    (行为型模式) Strategy 策略模式

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

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

    return strategy->execute(num1, num2); } }; ``` 在这个例子中,`Strategy`是策略接口,`ConcreteStrategyA`和`ConcreteStrategyB`是具体策略,`Context`是上下文。`Context`持有一个`Strategy`指针,并通过`...

    设计模式--策略模式StrategyPattern

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

Global site tag (gtag.js) - Google Analytics