`
wangking717
  • 浏览: 262581 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

JAVA策略设计模式:Strategy

阅读更多

 

博主 写道
策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。
策略模式使得算法可以在不影响到客户端的情况下发生变化。使用策略模式可以把行为和环境分割开来。
环境类负责维持和查询行为类,各种算法则在具体策略中提供。由于算法和环境独立开来,算法的修改都不会影响环境和客户端

 

策略模式:

由三部分组成

A:  抽象策略角色:策略类,通常由一个接口或者抽象类实现
B:  具体策略角色:包装了相关的算法和行为
C:  环境角色:持有一个策略类的引用,最终给客户端调用的。

 

看类图吧:


看实例吧:

 

/**  
 * 抽象策略角色  
 */  
public abstract class AbstractStrategy {   
    public abstract String calculate(float a,float b);   
}

/**  
 * 具体策略角色  
 */  
public class SubStrategy extends AbstractStrategy{   
  
    public  String calculate(float a,float b){   
        float result = a-b;   
        return "相减结果为:" + result;   
    }   
}  

/**  
 * 具体策略角色  
 */  
public class AddStrategy extends AbstractStrategy{   
  
    public  String calculate(float a,float b){   
        float result = a+b;   
        return "相加结果为:" + result;   
    }   
}   

/**  
 * 具体策略角色  
 */  
public class MultStrategy extends AbstractStrategy{   
  
    public  String calculate(float a,float b){   
        float result = a*b;   
        return "相乘结果为:" + result;   
    }   
}  

/**  
 * 具体策略角色  
 */  
public class DivisionStrategy extends AbstractStrategy{   
  
    public  String calculate(float a,float b){   
        float result = a/b;   
        return "相除结果为:" + result;   
    }   
}   

/**  
 * Context环境角色,最终给客户端调用的  
 */  
public class ContextRole {   
  
    /**  
     * 拥有一个策略类的引用  
     */  
    private AbstractStrategy abstactStrategy;   
       
    public ContextRole(AbstractStrategy abstactStrategy){   
        this.abstactStrategy = abstactStrategy;   
    }   
       
    public String calculate(float a,float b) {   
        String result = abstactStrategy.calculate(a, b);   
        return result;   
    }   
}  

/**  
 * 客户端  
 */  
public class Test {   
       
    public static void main(String[] args){   
        float a = 200;   
        float b = 25;   
           
        ContextRole contextRole1 = new ContextRole(new AddStrategy());   
        System.out.println(contextRole1.calculate(a, b));   
           
        ContextRole contextRole2 = new ContextRole(new SubStrategy());   
        System.out.println(contextRole2.calculate(a, b));   
           
        ContextRole contextRole3 = new ContextRole(new MultStrategy());   
        System.out.println(contextRole3.calculate(a, b));   
           
        ContextRole contextRole4 = new ContextRole(new DivisionStrategy());   
        System.out.println(contextRole4.calculate(a, b));   
           
    }   
  
}   

 

输出结果为:

相加结果为:225.0
相减结果为:175.0
相乘结果为:5000.0
相除结果为:8.0

总结:

策略模式优点:

1.可以很方便的动态改变算法或行为

2.避免使用多重条件转移语句

策略模式缺点:


1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
2.造成很多的策略类。

 

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

相关推荐

    Java EE设计模式:Spring企业级开发最佳实践_JavaEE_企业应用开发_

    《Java EE设计模式:Spring企业级开发最佳实践》是一本深度探讨如何在企业级Java应用程序中有效运用设计模式的著作。这本书聚焦于Spring框架,它作为Java EE领域中最为广泛使用的开源框架之一,极大地简化了企业级...

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

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

    Java 设计模式 策略模式

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

    java23种设计模式详解+源码(绝对详解)

    在Java编程中,有23种经典的GoF(Gang of Four)设计模式,它们被分为三大类:创建型、结构型和行为型。本资源集合了这些模式的详细解释与源码分析,旨在帮助开发者深入理解和应用设计模式。 1. 创建型模式...

    JAVA设计模式chm文档

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

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

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

    java 策略模式

    策略模式是设计模式的一种,它在Java编程中广泛应用于处理算法的封装和选择。策略模式的核心思想是将算法封装到不同的类中,使得算法的变化独立于使用它的客户端。这种模式可以提供更多的灵活性,使得程序在运行时...

    设计模式:Java语言中的应用.zip

    在Java中,设计模式的应用不仅限于这些基础模式,还包括对框架的理解和使用,如Spring框架中的依赖注入(Dependency Injection,DI)和控制反转(Inversion of Control,IoC)就是对工厂模式和策略模式的扩展。...

    23种java设计模式.pdf

    " JAVA 设计模式概述" JAVA 设计模式是指在软件设计过程中,为了提高代码的可维护性、灵活性和可扩展性所使用的一些惯用解决方案。JAVA 设计模式可以分为三种:创建模式、结构模式和行为模式。 1. 创建模式 创建...

    java 策略模式的小例子

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式主要通过接口或抽象类来定义一系列的算法,并将每个算法封装起来,使得它们可以互相替换,让算法独立于使用它的客户。下面我们将...

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

    在众多的设计模式中,策略模式(Strategy Pattern)是一种行为设计模式,它使你能在运行时改变对象的行为。在这个“JAVA设计模式例程-策略模式”的压缩包中,我们可以深入探讨策略模式的原理及其应用。 策略模式的...

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

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常涉及定义一系列算法,将每个算法封装到具有共同接口的独立类中,使得它们可以相互替换。这样做的主要好处是算法的变化不会影响...

    Java设计模式 设计模式介绍

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

    设计模式:Java语言中的应用.rar

    在Java编程中,设计模式的应用能够提高代码的可读性、可维护性和可扩展性,是专业开发者的必备技能。本资料“设计模式:Java语言中的应用.rar”详细探讨了如何在Java环境中有效地运用这些模式。 首先,我们要理解...

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

    在Java编程领域,设计模式是解决常见问题的可重用解决方案,它们代表了软件设计的最佳实践。本篇文章将深入探讨两种重要的设计模式:策略模式和模板模式。通过理解这两种模式,开发者可以更好地组织代码,提高代码的...

    java设计模式-策略模式

    在这个“java设计模式-策略模式”的示例中,我们将深入探讨如何使用策略模式来实现一个简单的超市促销系统。 策略模式的核心思想是定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换。这使得算法的...

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

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

    java策略模式小例子

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

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

    综上所述,策略模式在Java编程中是一个非常实用的设计模式,通过将算法封装到独立的策略类中,可以有效地管理和切换不同的行为,从而提升代码的灵活性和可维护性。在压缩包文件"StrategyPatterns例子"中,你可以找到...

    JAVA设计模式demo之策略模式

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

Global site tag (gtag.js) - Google Analytics