策略模式和工厂模式都是设计模式,但是它们的关注点不同。工厂模式关注对象创建,而策略模式关注算法多样性。
在计算机科学中,设计模式是一种被广泛接受并应用的解决方案,它为软件设计提供了一种标准的方法,策略模式是这其中的一种,它定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换,这种模式让算法的变化独立于使用它们的客户端。
策略模式的主要优点是它可以在运行时改变对象的行为,这意味着如果你需要更改一个系统的某些部分的行为,你只需要改变相关的策略类即可,而不需要修改使用这些策略的所有代码。
在策略模式中,我们定义了一系列的策略类,每个类都实现了一个特定的策略,我们创建一个上下文类,这个类持有一个策略对象的引用,并提供一个方法来设置这个策略,当上下文类的状态发生变化时,它会调用当前的策略对象来处理这个变化。
策略模式的主要组成部分包括:
1、抽象策略(Strategy):这是一个接口,定义了一些操作,但是没有具体实现,所有的具体策略类都需要实现这个接口。
2、具体策略(Concrete Strategy):这是实现了抽象策略接口的具体策略类,它们实现了抽象策略中定义的操作。
3、上下文(Context):这是一个使用策略的类,它包含一个指向策略对象的引用,并提供了一个方法来设置这个策略。
4、环境(Environment):这是一个包含上下文对象的环境类,它提供了一个方法来获取上下文对象,并通过上下文对象来调用策略的方法。
下面是一个简单的策略模式的例子:
// 抽象策略 public interface Strategy { void execute(); } // 具体策略A public class ConcreteStrategyA implements Strategy { public void execute() { System.out.println("Executing strategy A"); } } // 具体策略B public class ConcreteStrategyB implements Strategy { public void execute() { System.out.println("Executing strategy B"); } } // 上下文 public 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(); } }
在这个例子中,我们有两个具体的策略:A和B,我们的上下文类可以根据需要设置不同的策略,当我们调用上下文的executeStrategy方法时,它会执行当前设置的策略。