给我一个使用策略模式加工厂模式的代码
时间: 2023-08-31 12:19:50 浏览: 63
### 回答1:
使用策略模式,你可以通过以下代码创建一个加工厂模式:class ProcessingFactory:
def __init__(self):
self.strategies = {}
def register_strategy(self, name, strategy):
self.strategies[name] = strategy
def execute_strategy(self, name):
strategy = self.strategies.get(name)
if strategy is None:
raise ValueError("Unknown strategy name: {}".format(name))
return strategy()# Create a processing factory
factory = ProcessingFactory()# Register strategies
factory.register_strategy("strategy1", strategy1_function)
factory.register_strategy("strategy2", strategy2_function)# Execute strategies
factory.execute_strategy("strategy1")
factory.execute_strategy("strategy2")
### 回答2:
策略模式和工厂模式都是常用的设计模式,它们可以很好地结合使用来实现灵活的对象创建和行为选择。下面是一个使用策略模式和工厂模式的示例代码:
首先,我们定义一个策略接口(Strategy),用于定义不同行为的方法:
```java
public interface Strategy {
void 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");
}
}
```
接下来,我们需要创建一个工厂类来实例化策略对象:
```java
public class StrategyFactory {
public static Strategy createStrategy(String type) {
if ("A".equals(type)) {
return new ConcreteStrategyA();
} else if ("B".equals(type)) {
return new ConcreteStrategyB();
}
return null;
}
}
```
最后,我们在客户端代码中使用工厂和策略模式来执行不同的行为:
```java
public class Client {
public static void main(String[] args) {
Strategy strategyA = StrategyFactory.createStrategy("A");
strategyA.execute();
Strategy strategyB = StrategyFactory.createStrategy("B");
strategyB.execute();
}
}
```
这段代码中,我们通过调用工厂方法`createStrategy`来获取策略对象,然后通过策略对象来执行具体的逻辑。这样的设计模式使得客户端代码与具体的策略类解耦,同时也方便扩展和切换不同的策略实现。
### 回答3:
下面是一个使用策略模式和工厂模式的代码示例:
首先,定义一个接口:Order,表示订单,其中包含一个计算订单总价的方法:
```java
public interface Order {
double calculateTotalPrice();
}
```
接下来,我们可以实现多个具体的订单类,每个类都会实现Order接口,并根据不同的策略来计算订单总价:
```java
public class NormalOrder implements Order {
private double price;
public NormalOrder(double price) {
this.price = price;
}
@Override
public double calculateTotalPrice() {
return price;
}
}
public class DiscountOrder implements Order {
private double price;
private double discount;
public DiscountOrder(double price, double discount) {
this.price = price;
this.discount = discount;
}
@Override
public double calculateTotalPrice() {
return price * discount;
}
}
```
然后,我们可以定义一个工厂类OrderFactory来根据传入的参数创建具体的订单对象:
```java
public class OrderFactory {
public static Order createOrder(String type, double price, double discount) {
if (type.equals("normal")) {
return new NormalOrder(price);
} else if (type.equals("discount")) {
return new DiscountOrder(price, discount);
} else {
throw new IllegalArgumentException("Invalid order type");
}
}
}
```
最后,我们可以使用这些类来创建订单并计算总价:
```java
public class Main {
public static void main(String[] args) {
Order normalOrder = OrderFactory.createOrder("normal", 100.0, 0.0);
Order discountOrder = OrderFactory.createOrder("discount", 100.0, 0.9);
double normalPrice = normalOrder.calculateTotalPrice();
double discountPrice = discountOrder.calculateTotalPrice();
System.out.println("Normal Order Price: " + normalPrice);
System.out.println("Discount Order Price: " + discountPrice);
}
}
```
在这个示例中,我们使用策略模式来将不同的计算策略封装成具体的订单类,并使用工厂模式来创建订单对象。通过使用这两种模式,我们能够根据需求选择不同的策略以及创建相应的对象。