策略模式和工厂模式都是设计模式,但是它们的关注点不同。工厂模式关注对象创建,而策略模式关注算法多样性。 ,,工厂模式是一种创建型模式,它提供了一种创建对象的最佳方式。策略模式是一种行为型模式,它封装了一组算法,并将每个算法都封装在一个具有共同接口的类中,使得它们可以相互替换。
在计算机科学中,设计模式是解决特定问题的模板,它们为开发人员提供了一种可重用的解决方案,以应对常见的编程问题,我们将深入探讨策略模式,这是一种行为设计模式。
策略模式定义了一个算法家族,其中封装了一组可互换的算法,并使它们可以相互替换,此模式使得算法的变化独立于使用它们的客户端。
让我们来理解一下什么是策略模式,在一个类的行为或其算法可以在运行时更改的情况下,策略模式特别有用,你可能有一个排序算法或者一个处理日期的方法,这些都可以在运行时更改,策略模式允许你在不修改原有代码的情况下改变这些行为。
下面是一个简单的策略模式的Java实现:
我们定义一个策略接口: scss Copy code interface Strategy { public int doOperation(int num1, int num2); }
这个接口包含一个名为doOperation的方法,它接受两个整数参数并返回一个整数结果。
我们创建两个实现了该策略接口的具体策略类: scss Copy code class Add implements Strategy { public int doOperation(int num1, int num2) { return num1 + num2; } } scss Copy code class Subtract implements Strategy { public int doOperation(int num1, int num2) { return num1 - num2; } }
这两个类分别实现了加法和减法操作。
我们在上下文类中使用策略: scss Copy code class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void setStrategy(Strategy strategy) { this.strategy = strategy; } public int executeStrategy(int num1, int num2) { return this.strategy.doOperation(num1, num2); } }
在这个上下文类中,我们有一个策略成员变量和一个设置策略的方法,executeStrategy方法则负责调用当前策略的doOperation方法。
我们可以在主函数中测试这个模式: scss Copy code public static void main(String[] args) { Context context = new Context(new Add()); System.out.println("10 + 5 = " + context.executeStrategy(10, 5)); context.setStrategy(new Subtract()); System.out.println("10 - 5 = " + context.executeStrategy(10, 5)); }
在这个例子中,我们首先创建了一个执行加法操作的策略对象,然后改变了策略为执行减法操作,可以看到,我们的代码并没有被修改,只是通过改变上下文中的策略对象来改变了行为。