Java 策略模式 if-else用法实例详解

下面是关于“Java 策略模式 if-else用法实例详解”的完整攻略。

什么是策略模式?

策略模式是一种行为型设计模式,该模式定义了一些算法,封装每个算法,并使它们可以相互替换。此模式使算法独立于使用它的客户端,并且可以更改算法的独立变化。

关于题目

本文讲解了一种在java程序中使用if-else来实现策略模式的方法。

如何使用if-else实现策略模式?

假设我们有一个计算器程序,其可以执行加,减,乘,除四种操作。我们可以使用策略模式将其实现。示例如下:

定义策略

首先我们定义一个策略接口,该接口里包含一个calculate方法,用于根据输入的参数进行计算。

public interface CalculateStrategy {
    int calculate(int a, int b);
}

实现策略

然后我们实现具体的策略类,包含加、减、乘、除四种操作的具体实现。

public class AddStrategy implements CalculateStrategy {
    @Override
    public int calculate(int a, int b) {
        return a + b;
    }
}

public class SubtractStrategy implements CalculateStrategy {
    @Override
    public int calculate(int a, int b) {
        return a - b;
    }
}

public class MultiplyStrategy implements CalculateStrategy {
    @Override
    public int calculate(int a, int b) {
        return a * b;
    }
}

public class DivideStrategy implements CalculateStrategy {
    @Override
    public int calculate(int a, int b) {
        return a / b;
    }
}

调用策略

接下来我们定义一个Calculator类,用于执行具体的计算操作。

public class Calculator {
    public static int execute(int a, int b, String operator) {
        CalculateStrategy strategy = null;

        if (operator.equals("+")) {
            strategy = new AddStrategy();
        } else if (operator.equals("-")) {
            strategy = new SubtractStrategy();
        } else if (operator.equals("*")) {
            strategy = new MultiplyStrategy();
        } else if (operator.equals("/")) {
            strategy = new DivideStrategy();
        }

        if (strategy == null) {
            throw new IllegalArgumentException("Invalid Operator!");
        }

        return strategy.calculate(a, b);
    }
}

在Calculator类中,我们根据传入的operator参数判断是哪个具体的策略类实现并执行对应的calculate方法。

这里的operator永远都是可控的,但是如果出现了未知的情况,那么就需要抛出异常,提醒异常的处理。

测试代码

最后我们可编写一个测试类,测试Calculator类的执行结果。

public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 2;

        System.out.println("a + b = " + Calculator.execute(a, b, "+"));
        System.out.println("a - b = " + Calculator.execute(a, b, "-"));
        System.out.println("a * b = " + Calculator.execute(a, b, "*"));
        System.out.println("a / b = " + Calculator.execute(a, b, "/"));
    }
}

示例1:使用if-else实现策略模式

下面是示例1的完整代码:

public interface CalculateStrategy {
    int calculate(int a, int b);
}

public class AddStrategy implements CalculateStrategy {
    @Override
    public int calculate(int a, int b) {
        return a + b;
    }
}

public class SubtractStrategy implements CalculateStrategy {
    @Override
    public int calculate(int a, int b) {
        return a - b;
    }
}

public class MultiplyStrategy implements CalculateStrategy {
    @Override
    public int calculate(int a, int b) {
        return a * b;
    }
}

public class DivideStrategy implements CalculateStrategy {
    @Override
    public int calculate(int a, int b) {
        return a / b;
    }
}

public class Calculator {
    public static int execute(int a, int b, String operator) {
        CalculateStrategy strategy = null;

        if (operator.equals("+")) {
            strategy = new AddStrategy();
        } else if (operator.equals("-")) {
            strategy = new SubtractStrategy();
        } else if (operator.equals("*")) {
            strategy = new MultiplyStrategy();
        } else if (operator.equals("/")) {
            strategy = new DivideStrategy();
        }

        if (strategy == null) {
            throw new IllegalArgumentException("Invalid Operator!");
        }

        return strategy.calculate(a, b);
    }
}

public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 2;

        System.out.println("a + b = " + Calculator.execute(a, b, "+"));
        System.out.println("a - b = " + Calculator.execute(a, b, "-"));
        System.out.println("a * b = " + Calculator.execute(a, b, "*"));
        System.out.println("a / b = " + Calculator.execute(a, b, "/"));
    }
}

示例2:使用if-else实现多条件判断

在实际开发中我们可能会遇到多个条件的判断,我们可以使用if-else来优化代码实现方式,示例如下:

public class Command {
    public void execute(String command) {
        if (command.equals("start")) {
            // 启动操作
        } else if (command.equals("stop")) {
            // 停止操作
        } else if (command.equals("restart")) {
            // 重启操作
        } else {
            throw new IllegalArgumentException("Invalid Command: " + command);
        }
    }
}

在这个例子中,我们可以看到对于每一个command的执行,我们都使用了if-else进行判断和实现。但是,我们不推荐这种方法,因为如果当我们需要新增的功能,就需要再对代码进行修改。

可以建立子类继承一个父类,或者实现一个接口,而不是使用上述方式。这样我们就可以避免出现if-else开发模式。

总结

if-else实现策略模式虽然简单,但是会造成代码中继续的可维护性较差,以及可读性较差的情况。我们建议最好使用一个抽象基类或接口,然后在不同的子类中去实现。这样,我们就可以在代码中取消掉“if-else行为”,从而使代码更加具有可维护性,还可以通过多态的方式降低代码的耦合性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java 策略模式 if-else用法实例详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • SpringSecurity如何实现配置单个HttpSecurity

    要实现配置单个HttpSecurity,可以通过在配置类中创建多个protected的方法,并使用@Order注解来指定它们的顺序来实现。每个protected方法都会配置一个单独的HttpSecurity对象。 下面是实现的步骤: 创建一个配置类,并添加@EnableWebSecurity注解。 在配置类中创建多个被@Order注解标记的protected…

    Java 2023年5月20日
    00
  • Java操作FreeMarker模板引擎的基本用法示例小结

    要在Java中使用FreeMarker模板引擎进行模板渲染,需要经历以下几个步骤: 引入FreeMarker依赖 在Maven项目中,可以在pom.xml文件中添加以下依赖项: <dependency> <groupId>org.freemarker</groupId> <artifactId>freemark…

    Java 2023年6月15日
    00
  • JPA 使用criteria简单查询工具类方式

    JPA 使用 Criteria 简单查询工具类方式,具体步骤如下: 什么是Criteria查询 通常的JPQL查询必须要写类似于SELECT * FROM book WHERE id = 1 这样的SQL语句,书写SQL语句的时侯需要时刻注意SQL语句的拼写,如此繁琐而且费时费力,如果采用Criteria查询,则可以省去SQL语句的书写,Criteria查询…

    Java 2023年5月20日
    00
  • springboot整合 beatlsql的实例代码

    下面我将为您详细讲解如何将Spring Boot与BeetlSQL整合。 一、Spring Boot集成BeetlSQL的前置条件 在开始整合前,请确保您拥有以下环境和工具: JDK1.8及以上版本 Maven3.0及以上版本 Spring Boot 2.0.0及以上版本 BeetlSQL 2.x版本(本示例使用的是2.8.2版本) 二、创建Spring B…

    Java 2023年5月20日
    00
  • 详解java调用python的几种用法(看这篇就够了)

    下面是详解java调用python的几种用法的完整攻略。 1. 使用ProcessBuilder调用python ProcessBuilder可以通过指定命令行的方式启动子进程。因此使用ProcessBuilder可以很方便地调用python脚本,下面是示例代码: import java.io.*; public class CallPythonProces…

    Java 2023年5月23日
    00
  • java多版本共存

    原理 通过脚步改变path环境变量来实现java多版本切换.这里使用的是Win10. 一,删除原有的java搜索路径. 在安装高版本的java时,会添加一个路径到path环境变量中,如我的C:\Program Files\Common Files\Oracle\Java\javapath,在该目录下存有java.exe和javac.exe等.在用cmd执行命…

    Java 2023年4月17日
    00
  • JavaSpringBoot报错“ForbiddenException”的原因和处理方法

    原因 “ForbiddenException” 错误通常是以下原因引起的: 权限问题:如果您的权限存在问题,则可能会出现此错误。在这种情况下,需要检查您的权限并确保它们正确。 认证问题:如果您的认证存在问题,则可能会出现此错误。在这种情况下,需要检查您的认证并确保它们正确。 安全问题:如果您的安全存在问题,则可能会出现此错误。在这种情况下,需要检查您的安全并…

    Java 2023年5月4日
    00
  • Spring Boot两种全局配置和两种注解的操作方法

    Spring Boot是一个快速开发框架,它提供了许多便捷的功能,其中包括全局配置和注解。本文将详细讲解Spring Boot两种全局配置和两种注解的操作方法,包括以下内容: Spring Boot全局配置简介 application.properties配置文件 application.yml配置文件 @ConfigurationProperties注解 …

    Java 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部