java实现策略设计模式
时间: 2023-07-03 19:27:48 浏览: 67
在Java中实现策略设计模式,可以按照以下步骤进行:
1. 定义一个抽象策略类,包含一个抽象方法,用于封装具体策略类的算法或行为。
```
public abstract class Strategy {
public abstract void doSomething();
}
```
2. 定义一个具体策略类,继承抽象策略类,实现抽象方法,封装具体的算法或行为。
```
public class ConcreteStrategyA extends Strategy {
public void doSomething() {
System.out.println("Execute strategy A.");
}
}
public class ConcreteStrategyB extends Strategy {
public void doSomething() {
System.out.println("Execute strategy B.");
}
}
```
3. 定义一个上下文类,维护一个对抽象策略类的引用,用于调用具体策略类中封装的算法或行为。上下文类还提供了一个设置具体策略类的方法,用于动态切换和调用不同的算法或行为。
```
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void execute() {
strategy.doSomething();
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
}
```
4. 在客户端中创建一个上下文对象,并将一个具体策略对象传递给它。客户端可以通过调用上下文对象的执行方法,动态切换和调用不同的算法或行为。
```
public class Client {
public static void main(String[] args) {
Strategy strategyA = new ConcreteStrategyA();
Strategy strategyB = new ConcreteStrategyB();
Context context = new Context(strategyA);
context.execute();
context.setStrategy(strategyB);
context.execute();
}
}
```
在上面的示例中,客户端首先创建了两个具体策略对象,即`ConcreteStrategyA`和`ConcreteStrategyB`,然后创建了一个上下文对象`context`,并将`ConcreteStrategyA`对象传递给它。客户端通过调用`context`对象的执行方法,执行了`ConcreteStrategyA`对象中封装的算法或行为。接着,客户端使用`setStrategy`方法动态切换了具体策略对象为`ConcreteStrategyB`,再次调用`context`对象的执行方法,执行了`ConcreteStrategyB`对象中封装的算法或行为。
相关推荐
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)