怎么用静态工厂类实现策略模式
时间: 2023-11-18 12:04:30 浏览: 32
静态工厂类实现策略模式可以通过以下步骤实现:
1. 定义一个策略接口,包含具体策略类需要实现的方法。
2. 定义具体策略类,实现策略接口。
3. 定义一个静态工厂类,通过静态方法来创建具体策略类的实例,并返回策略接口类型的对象。
4. 在客户端代码中,通过静态工厂类的方法获取策略实例,然后调用策略接口的方法来执行具体的策略。
示例代码如下:
```
// 策略接口
public interface Strategy {
void execute();
}
// 具体策略类1
public class ConcreteStrategy1 implements Strategy {
@Override
public void execute() {
System.out.println("执行具体策略1");
}
}
// 具体策略类2
public class ConcreteStrategy2 implements Strategy {
@Override
public void execute() {
System.out.println("执行具体策略2");
}
}
// 静态工厂类
public class StrategyFactory {
public static Strategy createStrategy(String type) {
if ("strategy1".equals(type)) {
return new ConcreteStrategy1();
} else if ("strategy2".equals(type)) {
return new ConcreteStrategy2();
}
return null;
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Strategy strategy = StrategyFactory.createStrategy("strategy1");
strategy.execute();
}
}
```
在上述代码中,通过静态工厂类 StrategyFactory 来创建具体策略类的实例,并返回策略接口类型的对象。客户端代码可以通过 StrategyFactory 的 createStrategy 方法来获取具体策略实例,然后调用 execute 方法来执行具体策略。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)