下面是关于“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技术站