0 0

java 策略模式(strategy)怎么用5

 

 都说strategy模式可以简化if(){} else if(){}else if(){}....语句
可是在网上找了,感觉这种模式不能简化if(){} else if(){}else if(){}....语句,充其量将复杂的算法封装起来,但是还是要写if(){} else if(){}else if(){}....语句的。。。。

例如

if(1==a){
    //算法1
}else if(2 == a){
  //算法2
}else if(3 == a){
 //算法3
}

 

 strategy模式的思想是将 算法1  算法2 算法3 分别封装起来,并实现一个 算法接口例如

//算法接口
public interface Deal{ 
     public void request();
}

//算法1
public class S1 implements Deal{
      public void request(){
           //算法1
      };
}

//算法2
public class S2 implements Deal{
      public void request(){
           //算法2      
      };
}

//算法3 
public class S3 implements Deal{
    //..... (省略 同算法1算法2)
}

 

 

 还要写一个客户端调用的类

public class Execute{
    private Deal d ;
    public Execute(Deal d){
        this.d = d;
    }
    public request(){
        d.request();
    }
}

 

 问题就出来了,在客户端这么调用

  

if( a == 1){
    Execute exe = new Execute(new S1());
    exe.request();
}else if(a == 2){
   Execute exe = new Execute(new S2());
    exe.request();
}else if(a == 3){
   Execute exe = new Execute(new S3());
    exe.request();
}

 

最终客户端还是要写if ...else语句 

 

我理解的strategy模式就是把复杂的算法给封装起来,但是在客户端还是要用if ...else语句, 我这么理解对么?

2011年5月27日 13:54

1个答案 按时间排序 按投票排序

0 0

1.首先策略模式用有个上下文的概念,是通过调用上下文来调用某个策略模式。
2.策略模式的重点并不是简化if...esle...,重点应该是算法的分离,有更好的扩展性。
3.并不一定只有一个客户端,如果你的一个客户端只调用一个或者某几个(算法很多的情况下),是否有简化。

2011年5月27日 15:10

相关推荐

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

    在Java中,策略模式通常涉及定义一系列算法,并将每个算法封装起来,使得它们可以相互替换,同时使得算法的变化独立于使用它的客户。这个模式的核心在于它允许你将决策逻辑的实现与使用决策逻辑的客户端代码分离。 ...

    java 策略模式的小例子

    以下是一个简单的Java策略模式实现示例: ```java // 抽象策略 public interface Strategy { void execute(); } // 具体策略A public class StrategyA implements Strategy { @Override public void execute() ...

    java 策略模式

    在Java中使用策略模式的优点: 1. 可扩展性:添加新的策略只需要创建新的具体策略类,而无需修改现有代码,符合开闭原则。 2. 灵活性:可以在运行时根据需求选择和切换策略,增强了程序的灵活性。 3. 封装性:将...

    java策略模式小例子

    总结一下,这个"java策略模式小例子"项目是一个很好的起点,用于理解和实践如何在Java中使用策略模式。通过分析`Strategy_Game`中的代码,我们可以深入理解策略模式的工作原理及其在实际问题中的应用。无论你是初学...

    Java策略模式+案例

    在Java中,策略模式允许我们定义一组算法或策略,并将每个策略封装为一个类,使得它们可以互换,而不会影响到客户端代码。这种模式的核心在于"策略",即一系列可互相替换的算法或行为。 策略模式的主要优点包括: ...

    java策略模式示例.zip

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

    Java策略模式Demo

    在Java中,策略模式主要通过定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法独立于使用它的客户而变化。这种模式的核心是策略接口和实现策略的类。 策略模式的关键组成部分包括: 1. **...

    Java 设计模式 策略模式

    在Java中,策略模式主要通过定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换,让算法独立于使用它的客户而变化。 首先,策略模式的核心是策略接口和实现策略接口的具体策略类。在Java中,我们可以...

    java策略模式源代码

    在提供的"java策略模式源代码"中,我们可以预期包含以下几个关键组成部分: 1. **策略接口(Strategy Interface)**:这是所有策略类都需要实现的接口,定义了一组相关或相互排斥的操作。例如,`SortingStrategy` ...

    java 策略模式demo

    Java策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通常通过定义一系列算法类并让它们之间可以互换来实现。这种模式的关键在于将算法的使用与算法的实现分离开来,使得系统能够...

    策略(strategy)模式

    在Java编程中,策略模式通常通过接口或者抽象类来定义策略,然后由具体策略类实现这些接口或继承这些抽象类。在运行时,上下文对象通过构造函数或者setter方法接收策略对象,从而改变自身的行为。 总结来说,策略...

    JAVA_Strategy.rar_java 策略模式、工厂模式、桥接模式_severalgdo_strategy

    在"JAVA_Strategy.rar"这个压缩包中,severalgdo_strategy可能包含了一些示例代码或者教程,用于演示如何在Java项目中实施策略模式、工厂模式和桥接模式。解压并学习这些资源,可以帮助你深入理解这些模式的实现细节...

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

    在Java中,策略模式是通过定义一系列算法,并将每个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户而变化。这种模式在Android开发中非常常见,尤其是在处理不同场景下需要动态改变行为的情况。 首先...

    策略模式在实际项目中的应用二

    在Java中,策略模式通过定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户而变化。这种模式通常用于处理多种可能的算法或行为选择场景,避免硬编码,增加代码的灵活性和可...

    《JAVA与模式》之策略模式

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

    策略模式的实现,通过反射

    在Java中,策略模式通常用于将算法封装到不同的类中,使得可以根据需要动态选择并应用这些算法。本示例将详细介绍如何通过两种方法实现策略模式:一种是通过Map存储方式,另一种是通过配置文件加反射方式。 首先,...

    JAVA策略模式实现

    在"JAVA策略模式实现"的例子中,我们可能会有一个`Strategy`接口或抽象类,它定义了一组通用的操作,例如处理邮件的策略。然后,我们可以创建多个具体的策略类,如`SimpleMailStrategy`、`PriorityMailStrategy`和`...

    java设计模式-策略模式

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

    策略模式 Strategy Pattern

    ### 策略模式 Strategy Pattern #### 概述 策略模式是一种行为设计模式,它使得算法可以在运行时被更改。这种模式允许一个类的行为或其算法在运行时根据需要进行改变,通过这种方式,我们可以轻松地扩展不同的算法...

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

    比如,在游戏开发中,角色的移动策略可以使用策略模式,定义不同的移动方式(如步行、飞行等);而游戏的战斗流程则可以用模板模式来定义,每个战斗阶段(如攻击、防御)的具体行为由子类实现。 此外,这两种模式也...

Global site tag (gtag.js) - Google Analytics