java 策略模式 实例
时间: 2023-06-09 16:01:54 浏览: 48
好的,我可以回答关于Java策略模式实例的问题。策略模式是一种常用的设计模式,它可以让程序在运行时动态地选择算法。在Java中,可以通过创建一个抽象策略类和具体策略类来实现策略模式。举个例子:假设我们有一个订单类,需要根据订单的不同属性计算价格。我们可以创建一个抽象策略类来定义计算算法接口,然后创建具体策略类来实现不同的算法。在订单类中,可以根据需要动态地选择具体的策略类计算价格。
相关问题
java策略模式应用实例
Java中的策略模式是一种行为型设计模式,它允许在运行时根据不同的算法或策略来改变对象的行为。这种模式可以将算法的实现与调用代码分离,使得它们可以独立地变化。
下面是一个简单的Java策略模式的应用实例:
首先,我们定义一个策略接口(Strategy),它包含一个执行算法的方法:
```java
public interface Strategy {
void execute();
}
```
然后,我们实现两个具体的策略类(ConcreteStrategyA和ConcreteStrategyB),它们分别实现了策略接口中的execute方法:
```java
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");
}
}
```
接下来,我们定义一个上下文类(Context),它包含一个策略对象,并提供一个执行策略的方法:
```java
public class Context {
private Strategy strategy;
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void executeStrategy() {
strategy.execute();
}
}
```
最后,我们可以通过以下方式使用策略模式:
```java
public class Main {
public static void main(String[] args) {
Strategy strategyA = new ConcreteStrategyA();
Strategy strategyB = new ConcreteStrategyB();
Context context = new Context();
context.setStrategy(strategyA);
context.executeStrategy();
context.setStrategy(strategyB);
context.executeStrategy();
}
}
```
在上述示例中,我们通过策略模式将不同的算法封装在具体的策略类中,并通过上下文类来切换和执行不同的策略。这样,我们可以方便地扩展和替换策略,而无需修改客户端代码。
希望这个实例能帮助你更好地理解Java中的策略模式。
java策略模式具体实例
Java中的策略模式(Strategy Pattern)是一种行为设计模式,它允许你在运行时动态地改变对象的行为。在策略模式中,创建一个表示各种策略的对象和一个Context对象,该Context对象可以根据不同的策略来改变它的行为。
以下是一个简单的Java策略模式的示例,我们将使用该模式来实现一个简单的计算器应用程序。
首先,我们创建一个接口来表示策略:
```
public interface CalculationStrategy {
int calculate(int a, int b);
}
```
然后,我们创建几个实现该接口的类来表示不同的计算策略,例如:
```
public class AddStrategy implements CalculationStrategy {
public int calculate(int a, int b) {
return a + b;
}
}
public class SubtractStrategy implements CalculationStrategy {
public int calculate(int a, int b) {
return a - b;
}
}
public class MultiplyStrategy implements CalculationStrategy {
public int calculate(int a, int b) {
return a * b;
}
}
public class DivideStrategy implements CalculationStrategy {
public int calculate(int a, int b) {
return a / b;
}
}
```
接下来,我们创建一个Context类,它将使用策略接口来执行计算:
```
public class CalculatorContext {
private CalculationStrategy strategy;
public CalculatorContext(CalculationStrategy strategy) {
this.strategy = strategy;
}
public int executeStrategy(int a, int b) {
return strategy.calculate(a, b);
}
}
```
最后,我们可以在我们的应用程序中使用上述类来执行各种计算:
```
public class Main {
public static void main(String[] args) {
CalculatorContext context = new CalculatorContext(new AddStrategy());
System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
context = new CalculatorContext(new SubtractStrategy());
System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
context = new CalculatorContext(new MultiplyStrategy());
System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
context = new CalculatorContext(new DivideStrategy());
System.out.println("10 / 5 = " + context.executeStrategy(10, 5));
}
}
```
在上述示例中,我们创建了一个CalculatorContext对象,并根据需要更改策略对象。每个策略对象都有一个calculate方法,用于执行不同的计算操作。通过这种方式,我们可以在运行时动态地更改对象的行为,而不需要更改应用程序的代码。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)