Java策略模式和工厂模式的区别
概述
本文将介绍Java中策略模式和工厂模式的区别。首先,我们会通过一个表格展示整个实现过程的步骤。然后,我们会逐步解释每个步骤需要做什么,并提供相应的代码示例和注释。
实现步骤
步骤 | 策略模式 | 工厂模式 |
---|---|---|
1 | 定义策略接口 | 定义产品接口 |
2 | 实现策略类 | 实现产品类 |
3 | 创建上下文类 | 创建工厂类 |
4 | 注入具体策略类 | 使用工厂类创建产品对象 |
步骤详解
1. 定义策略接口(Strategy Interface)
在策略模式中,我们首先需要定义一个策略接口,该接口包含所有策略类共同的方法。下面是一个示例:
public interface PaymentStrategy {
public void pay(double amount);
}
这里我们定义了一个PaymentStrategy
接口,其中有一个pay
方法用于支付金额。
2. 实现策略类(Strategy Implementation)
接下来,我们需要实现具体的策略类,这些类实现了策略接口并提供了自己的实现逻辑。例如,我们可以创建两个具体的策略类:PayPalStrategy
和CreditCardStrategy
:
public class PayPalStrategy implements PaymentStrategy {
private String email;
private String password;
public PayPalStrategy(String email, String password) {
this.email = email;
this.password = password;
}
public void pay(double amount) {
// 在这里实现使用PayPal支付的逻辑
System.out.println("使用PayPal支付:" + amount);
}
}
public class CreditCardStrategy implements PaymentStrategy {
private String cardNumber;
private String cvv;
public CreditCardStrategy(String cardNumber, String cvv) {
this.cardNumber = cardNumber;
this.cvv = cvv;
}
public void pay(double amount) {
// 在这里实现使用信用卡支付的逻辑
System.out.println("使用信用卡支付:" + amount);
}
}
在上述代码中,我们实现了PayPalStrategy
和CreditCardStrategy
两个具体的策略类,它们分别提供了使用PayPal和信用卡进行支付的逻辑。
3. 创建上下文类(Context Class)
接下来,我们需要创建一个上下文类,该类包含一个策略对象,并提供一个方法用于调用策略对象的支付方法。例如,我们创建一个名为PaymentContext
的上下文类:
public class PaymentContext {
private PaymentStrategy paymentStrategy;
public PaymentContext(PaymentStrategy paymentStrategy) {
this.paymentStrategy = paymentStrategy;
}
public void pay(double amount) {
paymentStrategy.pay(amount);
}
}
在上述代码中,我们创建了一个PaymentContext
类,它包含一个paymentStrategy
对象,并提供了一个pay
方法用于调用策略对象的支付方法。
4. 注入具体策略类(Injecting Concrete Strategies)
在策略模式中,我们使用上下文类来调用具体的策略对象。下面是一个示例,展示如何使用策略模式进行支付:
public class Main {
public static void main(String[] args) {
// 创建上下文对象,并注入具体策略对象
PaymentContext context = new PaymentContext(new PayPalStrategy("example@gmail.com", "password"));
// 调用上下文对象的支付方法
context.pay(100.0);
}
}
在上述代码中,我们创建了一个PaymentContext
对象,并注入了一个PayPalStrategy
对象。然后,我们调用上下文对象的pay
方法进行支付。
工厂模式的区别
工厂模式和策略模式都是常见的设计模式,但它们的用途和实现方式略有不同。
工厂模式的主要目的是创建对象,它通过