Java策略模式是一种行为设计模式,它允许程序在运行时动态地选择不同的算法来实现特定的功能。它可以帮助我们将复杂的业务逻辑分解成一系列可重用的策略,从而使代码更易于理解和扩展。
下面是一个关于 Java 策略模式的例子:假设我们有一个电影院应用,它可以根据用户的年龄来决定电影的价格。
public interface PriceStrategy { double getPrice(int age); } public class ChildPriceStrategy implements PriceStrategy { @Override public double getPrice(int age) { if (age < 12) { return 5.0; } else { return 10.0; } } } public class AdultPriceStrategy implements PriceStrategy { @Override public double getPrice(int age) { if (age >= 18) { return 15.0; } else { return 10.0; } } } public class MovieTicket { private int age; // 电影票买家年龄 private PriceStrategy priceStrategy; // 电影票价格策略对象 public MovieTicket(int age) { this.age = age; // 根据买家年龄初始化电影票对象时,同时初始化相应的价格策略对象 if (age < 12) { // 如果买家年龄小于12岁,则使用儿童价格策略对象 priceStrategy = new ChildPriceStrategy(); ) ; // 如果买家年龄大于18岁,则使用成人价格策略对象 else priceStrategy = new AdultPriceStrategy(); } public double getPrice() { return priceStrategy.getPrice(age); }}
在策略模式中,可以在运行时更改算法。
策略模式是一种行为模式。
在策略模式中,我们创建表示各种算法的对象和运行算法的上下文对象。
策略对象更改上下文对象上的算法。
interface MathAlgorithm { public int calculate(int num1, int num2); } class MathAdd implements MathAlgorithm{ @Override public int calculate(int num1, int num2) { return num1 + num2; } } class MathSubstract implements MathAlgorithm{ @Override public int calculate(int num1, int num2) { return num1 - num2; } } class MathMultiply implements MathAlgorithm{ @Override public int calculate(int num1, int num2) { return num1 * num2; } } class MathContext { private MathAlgorithm algorithm; public MathContext(MathAlgorithm strategy){ this.algorithm = strategy; } public int execute(int num1, int num2){ return algorithm.calculate(num1, num2); } } public class Main { public static void main(String[] args) { MathContext context = new MathContext(new MathAdd()); System.out.println("10 + 5 = " + context.execute(10, 5)); context = new MathContext(new MathSubstract()); System.out.println("10 - 5 = " + context.execute(10, 5)); context = new MathContext(new MathMultiply()); System.out.println("10 * 5 = " + context.execute(10, 5)); } }
上面的代码生成以下结果。
Java面向对象设计 -Java构造函数构造函数是用于在对象创建后立即初始化对象的代码块。构造函数的结构看起来类似于一个方法。声明...
Java面向对象设计 -Java注释反射程序元素上的注释是Java对象。允许您访问其注释的程序元素实现java.lang.reflect.AnnotatedEleme...
Java面向对象的设计 -Java接口继承接口可以从另一个接口继承。与类不同,接口可以从多个接口继承。interface Singer {void sing(...