策略模式和工厂模式都是面向对象编程中的重要设计模式。它们的区别在于,工厂模式关注对象的创建,而策略模式关注算法多样性。
在面向对象编程中,我们经常需要根据不同的情况执行不同的算法,这时,策略模式就是一种非常有用的设计模式,它可以将算法封装成独立的类,使得它们可以相互替换,从而实现了灵活的算法控制。
策略模式的核心思想是定义一系列的算法,并将每个算法封装起来,使它们可以相互替换,这些算法被称为策略,它们之间可以相互协作,以完成某个任务。
下面是一个简单的策略模式示例:
// 定义一个策略接口 interface Strategy { void execute(); } // 实现具体的策略类 class ConcreteStrategyA implements Strategy { @Override public void execute() { System.out.println("执行策略A"); } } class ConcreteStrategyB implements Strategy { @Override public void execute() { System.out.println("执行策略B"); } } // 定义上下文类,用于调用策略类的方法 class Context { private Strategy strategy; public Context(Strategy strategy) { this.strategy = strategy; } public void setStrategy(Strategy strategy) { this.strategy = strategy; } public void executeStrategy() { strategy.execute(); } } public class StrategyPatternDemo { public static void main(String[] args) { // 创建具体策略对象 Strategy strategyA = new ConcreteStrategyA(); Strategy strategyB = new ConcreteStrategyB(); // 创建上下文对象,并设置策略为策略A Context context = new Context(strategyA); context.executeStrategy(); // 输出:执行策略A // 将策略切换为策略B,并执行新的策略 context.setStrategy(strategyB); context.executeStrategy(); // 输出:执行策略B } }
在这个示例中,我们定义了一个策略接口Strategy
,以及两个实现类ConcreteStrategyA
和ConcreteStrategyB
,这两个实现类分别代表了两种不同的算法,我们定义了一个上下文类Context
,它包含一个策略成员变量,并提供了设置策略和执行策略的方法,在main
方法中,我们创建了具体策略对象和上下文对象,并通过上下文对象来执行不同的策略。