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日

相关文章

  • 微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决

    针对这个问题,我先介绍一下微信JS-SDK和AngularJS的SPA应用中使用router进行页面跳转的基本概念,然后再讲解如何解决jssdk校验失败问题,最后给出两个示例说明。 微信JS-SDK 微信JS-SDK是一套用于支持公众号网页开发的JavaScript程序,提供了丰富的接口和能力,通过这些接口和能力可以实现例如获取用户信息、分享、支付等功能。开…

    Java 2023年6月15日
    00
  • Spring Integration概述与怎么使用详解

    Spring Integration概述 Spring Integration是Spring框架的一个扩展,提供了一种集成不同系统、应用、协议和数据格式的方式。它提供了许多现成的组件和模板,使得实现企业级集成变得更加便捷和高效。 Spring Integration采用基于消息的异步通信模型,所有的组件都是被设计成异步的最终接收者,而消息则负责在组件之间传递…

    Java 2023年5月19日
    00
  • kotlin中数据类重写setter getter的正确方法

    当我们创建一个Kotlin数据类时,它会自动为每一个属性创建默认的 getter 和 setter 方法。但是如果我们需要对某个属性重写 getter 或 setter 方法,我们该怎么做呢? 首先,我们需要在数据类中定义属性并为其提供一个初始值。然后我们需要为该属性定义一个自定义的 setter 或 getter 方法。 下面是一些示例代码,可帮助您理解如…

    Java 2023年5月23日
    00
  • Java实现作业调度的示例代码

    下面是Java实现作业调度的示例代码的攻略: 1. 理解作业调度 在计算机系统中,作业是指用户提交的一项任务。作业调度是指操作系统针对用户提交的作业对其进行管理和调度,使其能够高效地执行。作业调度是一个重要的操作系统功能,可以根据用户的需求和系统资源的使用情况,对作业进行优先级、并发度、执行方式等的调度。 2. 利用Java实现作业调度 Java语言具有很好…

    Java 2023年5月18日
    00
  • 详解JavaEE 使用 Redis 数据库进行内容缓存和高访问负载

    详解JavaEE 使用 Redis 数据库进行内容缓存和高访问负载攻略 简介 JavaEE 是一种基于 Java 语言实现的企业级应用程序开发标准。在进行 JavaEE 企业级应用程序开发过程中,数据库缓存和高访问负载问题一直是需要解决的关键技术问题。Redis 是一种基于内存的高性能 key-value 数据库,它能够有效地解决 JavaEE 应用程序的缓…

    Java 2023年5月20日
    00
  • Spring Boot整合web层实现过程详解

    下面给出详细的“SpringBoot整合web层实现过程详解”: 1. 引入依赖 SpringBoot已经内置了常用的Web框架,如SpringMVC、Spring WebFlux等。因此,我们只需要在pom.xml中引入SpringBoot Web依赖即可。 <dependencies> <!–Web相关依赖–> <dep…

    Java 2023年5月15日
    00
  • 多模字符串匹配算法原理及Java实现代码

    多模字符串匹配算法原理及Java实现代码攻略 多模字符串匹配算法是在一个文本串中同时匹配多个模式串的算法。常见的多模匹配算法有Trie树、AC自动机等,本文介绍的是KMP算法。 KMP算法原理 KMP算法的核心思想是利用已知信息,避免不必要的匹配。即:对于模式串中的每一个位置,找到该位置之前的子串的最长公共前后缀,并记录在next[]数组中。当匹配过程中发生…

    Java 2023年5月19日
    00
  • 利用Java手写一个简易的lombok的示例代码

    下面是“利用Java手写一个简易的lombok的示例代码”的完整攻略。 1. 简介 Lombok是一个Java的库项目,通过注解的方式减少Java代码中的样板代码,提高生产率。使用Lombok可以轻松地实现JavaBean模式,并且省去了开发时大量的getter/setter、toString、equals、hashCode等方法的手动编写。 本文将基于Lo…

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