`
androidssh
  • 浏览: 115291 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java设计模式之strategy(策略模式)和policy模式(泛化的strategy模式)

 
阅读更多

strategy模式

 

定义: 运行时刻选择算法

 

表面上看起来,state模式和strategy模式是非常相似的,但既然他们分成两种不同的模式,就有一定的区别,用一句话来概括就是:

策略用来处理算法方式变化,而状态则是处理状态变化。

具体可以参考:http://blog.csdn.net/lwzcjd/archive/2009/05/19/4201828.aspx

 

下面举个strategy的例子:


 

  1. package com.factory.commonality;  
  2. /** 
  3.  * strategy模式的应用。 
  4.  */  
  5. interface Strategy {  
  6.     void algorithmInterface();  
  7. }  
  8. class ConcreteStrategyA implements Strategy {  
  9.     public void algorithmInterface() {  
  10.         System.out.println("Called ConcreteStrategyA.algorithmInterface()");  
  11.     }  
  12. }  
  13. class ConcreteStrategyB implements Strategy {  
  14.     public void algorithmInterface() {  
  15.         System.out.println("Called ConcreteStrategyB.algorithmInterface()");  
  16.     }  
  17. }  
  18. class ConcreteStrategyC implements Strategy {  
  19.     public void algorithmInterface() {  
  20.         System.out.println("Called ConcreteStrategyC.algorithmInterface()");  
  21.     }  
  22. }  
  23. class Context {  
  24.     Strategy strategy;  
  25.     public Context(Strategy strategy) {  
  26.         this.strategy = strategy;  
  27.     }  
  28.     public void doAlgorithm() {  
  29.         strategy.algorithmInterface();  
  30.     }  
  31. }  
  32. public class StrategyPatternTest {  
  33.     public static void main(String[] args) {  
  34.         Context c1 = new Context(new ConcreteStrategyA());  
  35.         c1.doAlgorithm();  
  36.         Context c2 = new Context(new ConcreteStrategyB());  
  37.         c2.doAlgorithm();  
  38.         Context c3 = new Context(new ConcreteStrategyC());  
  39.         c3.doAlgorithm();  
  40.     }  
  41. }  

 

 

运行结果:

Called ConcreteStrategyA.algorithmInterface()
Called ConcreteStrategyB.algorithmInterface()
Called ConcreteStrategyC.algorithmInterface()

 

 

policy模式

尽管 GoF 说Policy 模式只是Strategy 模式的一个别名,但是他们给出的Strategy 模式的例子隐含的假定了strategy 对象只使用一个方法――也就是说假定你已经把可能变化的算法拆成了一段单独的代码。

 

其他人用Policy 模式来表示一个对象有多个方法的情况,对于不同的类,这些方法可能相互独立变化。相对于(Strategy 模式) 只能有一个方法而言,Policy 模式具有更大的灵活性。

 

例如,当某个产品需要被运送到不同国家的时候,与该产品相关的海运政策(shipping policy)可以被用来说明一些与运输有关的问题。这些问题可能包括运输方式,如何计算邮资或者运费,客户需求以及费用,特殊处理的费用等等。所有这些东西可能会互不相干的变化,而且很重要的一点是在运输过程中你可能会在不同地点(points)需要上述信息。

 

通常情况下,把Strategy 模式和Policy 模式区别开来是很有好处的,用Strategy 模式处理一个方法(变化)的情况,而用Policy 模式处理多个方法。  

分享到:
评论

相关推荐

    JAVA设计模式例程-策略模式

    总的来说,这个“JAVA设计模式例程-策略模式”提供了一个学习和实践策略模式的好例子,通过阅读和分析源代码,我们可以更好地理解如何在实际开发中应用这一模式,提升我们的编程技巧和设计能力。

    Java设计模式 设计模式介绍

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

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

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

    JAVA设计模式demo之策略模式

    在这个"JAVA设计模式demo之策略模式"的示例中,你可能会看到以下的代码结构: 1. **策略接口**:`Strategy.java` ```java public interface Strategy { void execute(); } ``` 这个接口定义了一个通用的行为...

    JAVA设计模式chm文档

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

    java设计模式之策略模式与模板模式

    本篇文章将深入探讨两种重要的设计模式:策略模式和模板模式。通过理解这两种模式,开发者可以更好地组织代码,提高代码的灵活性和可扩展性。 ### 策略模式 策略模式是一种行为设计模式,它使你能在运行时改变对象...

    Java 设计模式 策略模式

    总之,策略模式是一种强大的设计模式,它鼓励我们编写松耦合的代码,允许在运行时动态地选择和更改算法。在Java开发中,尤其是在需要灵活处理算法选择的场景下,策略模式是一个值得学习和使用的工具。

    设计模式之策略模式Java实现和类设计图

    对于策略模式,类设计图通常会显示Context、Strategy接口和具体策略类之间的关系;而对于装饰模式,类设计图会展示Component、ConcreteComponent、Decorator和具体装饰类之间的关系。通过类设计图,开发者可以更好地...

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

    总结来说,策略模式在Java和Android开发中是一种非常实用的设计模式,它通过封装不同的策略,使程序能够根据需要在运行时灵活选择和切换算法,提高了代码的灵活性和可扩展性。理解和掌握策略模式对于提升Android开发...

    java设计模式之Strategy.docx

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

    Java设计模式之禅

    《Java设计模式之禅》是一本深入浅出讲解设计模式的书籍,书中不仅包含23种经典设计模式的案例,还详细介绍了设计模式背后的思想和原则,适合初学者以及对设计模式有一定了解的程序员阅读。本书旨在帮助读者理解如何...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    3. **行为型模式**:包括策略(Strategy)、模板方法(Template Method)、观察者(Observer)、迭代器(Iterator)、访问者(Visitor)、责任链(Chain of Responsibility)、命令(Command)、备忘录(Memento)、...

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

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在软件设计中,有时我们需要根据不同的场景或条件选择不同的算法或行为。策略模式允许我们将这些算法封装成独立的类,每个类代表一种策略,然后在运行...

    java设计模式之Strategy.pdf

    Java策略模式(Strategy)是一种行为设计模式,它使你能在运行时改变对象的行为。在给定的场景中,策略模式允许你选择一个算法或行为,而不是硬编码它们。这种模式适用于当一个系统需要在同一时间使用多种算法,或者...

    《Java设计模式》课后答案-刘伟.rar

    行为型设计模式如策略(Strategy)、模板方法(Template Method)、观察者(Observer)、命令(Command)、迭代器(Iterator)、访问者(Visitor)、状态(State)、职责链(Chain of Responsibility)、解释器...

    23种java设计模式.pdf

    JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建模式是指在创建对象时使用的模式,包括 Factory(工厂模式)、Singleton(单例模式)、Builder(建造者模式)、Prototype(原型模式...

    java设计模式之Strategy (2).pdf

    Java设计模式中的Strategy模式是一种对象行为型模式,它允许在运行时动态地改变对象的行为。在上述例子中,Strategy模式被用来处理字符串替换的不同策略。这个模式的核心是定义一系列算法,并将每个算法封装到一个...

    java设计模式期末考试选择题100道

    适合Java设计模式期末考试选择题复习,形式如下: 10.(单选题)Facade(外观)模式的意图是 正确答案: A A.希望简化现有系统的使用方法,你需要定义自己的接口 B.将一个无法控制的现有对象与一个特定借口相匹配。 C....

    《JAVA与模式》之策略模式

    javase 设计模式的strategy pattern《JAVA与模式》之策略模式详解

    JAVA设计模式之行为模式

    这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...

Global site tag (gtag.js) - Google Analytics