策略模式和工厂模式是两种不同的设计模式,它们的目的、结构、适用场景以及客户端与模式的关系都有所不同 。 ,,工厂模式解决的是“如何创建对象”的问题,而策略模式解决的是“如何选择行为”的问题。在复杂的设计中,这两种模式可以结合使用,例如工厂模式可以创建不同的策略对象,提供给客户端使用 。
本文目录导读:
策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装在一个具有共同接口的独立类中,使得它们可以相互替换,策略模式让算法的变化独立于使用它的客户端,在面向对象编程中,策略模式是一种非常重要的设计模式,它可以帮助我们更好地实现代码的复用和扩展。
策略模式的基本概念
1、策略模式定义:策略模式是一种行为型设计模式,它定义了一系列算法,并将每个算法封装在一个具有共同接口的独立类中,使得它们可以相互替换。
2、策略模式特点:
- 策略模式中的算法是独立的,互不影响;
- 策略模式中的算法可以相互替换;
- 策略模式中的算法可以在运行时动态选择。
3、策略模式角色:
- Context(上下文):负责维护一个策略对象的引用,在其内部保存一个指向策略对象的引用。
- Strategy(策略):定义所有支持的算法,它们之间可以相互替换。
- ConcreteStrategyA(具体策略A)、ConcreteStrategyB(具体策略B)等:实现具体的策略类,它们实现了Strategy接口。
策略模式的实现步骤
1、定义一个具有共同接口的抽象策略类,该接口包含一个方法用于执行具体的算法。
public interface Strategy { void execute(); }
2、实现具体的策略类,这些类实现了Strategy接口,并实现了execute()方法。
public class ConcreteStrategyA implements Strategy { @Override public void execute() { System.out.println("执行策略A"); } } public class ConcreteStrategyB implements Strategy { @Override public void execute() { System.out.println("执行策略B"); } }
3、定义一个上下文类,该类负责维护一个策略对象的引用,在其内部保存一个指向策略对象的引用。
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(); } }
4、在客户端代码中,根据需要选择合适的策略对象,并将其设置到上下文对象中,然后调用上下文对象的executeStrategy()方法执行具体的算法。
public class Client { public static void main(String[] args) { // 根据需要选择合适的策略对象,并将其设置到上下文对象中 Context context = new Context(new ConcreteStrategyA()); context.executeStrategy(); // 输出:执行策略A context.setStrategy(new ConcreteStrategyB()); // 将策略切换为策略B context.executeStrategy(); // 输出:执行策略B } }
策略模式的应用场景
1、当需要在运行时动态地改变程序的行为时,可以使用策略模式,一个排序算法可以根据输入的数据自动选择合适的排序方式(如快速排序、冒泡排序等)。
2、当需要对一组数据进行不同的处理时,可以使用策略模式,一个文件处理器可以根据文件的内容自动选择合适的解析方式(如JSON解析、XML解析等)。