用java实现策略模式
时间: 2023-10-01 19:03:38 浏览: 43
策略模式是一种行为型设计模式,它允许在运行时根据需要更改算法或策略。在策略模式中,我们将算法封装在独立的类中,使它们可以互换。
下面是一个用Java实现策略模式的简单例子:
首先,我们定义一个接口`PaymentStrategy`,它包含一个`pay`方法,该方法将被不同的支付策略实现:
```java
public interface PaymentStrategy {
void pay(double amount);
}
```
然后,我们实现两个具体的支付策略,一个是信用卡支付策略,另一个是支付宝支付策略。这两个类都实现了`PaymentStrategy`接口:
```java
public class CreditCardPayment implements PaymentStrategy {
private String name;
private String cardNumber;
private String cvv;
private String expiryDate;
public CreditCardPayment(String name, String cardNumber, String cvv, String expiryDate) {
this.name = name;
this.cardNumber = cardNumber;
this.cvv = cvv;
this.expiryDate = expiryDate;
}
@Override
public void pay(double amount) {
System.out.println(amount + " paid with credit/debit card");
}
}
public class AlipayPayment implements PaymentStrategy {
private String email;
private String password;
public AlipayPayment(String email, String password) {
this.email = email;
this.password = password;
}
@Override
public void pay(double amount) {
System.out.println(amount + " paid with Alipay");
}
}
```
最后,我们定义一个`PaymentContext`类,该类包含一个`PaymentStrategy`实例,它将用于支付。`PaymentContext`类还包含一个`pay`方法,该方法将调用当前的支付策略的`pay`方法:
```java
public class PaymentContext {
private PaymentStrategy paymentStrategy;
public PaymentContext(PaymentStrategy paymentStrategy) {
this.paymentStrategy = paymentStrategy;
}
public void pay(double amount) {
paymentStrategy.pay(amount);
}
}
```
现在,我们可以使用这些类来模拟不同的支付场景。例如,我们可以使用信用卡支付:
```java
PaymentStrategy creditCardPayment = new CreditCardPayment("John Doe", "1234567890123456", "123", "12/22");
PaymentContext paymentContext = new PaymentContext(creditCardPayment);
paymentContext.pay(100);
```
或者,我们可以使用支付宝支付:
```java
PaymentStrategy alipayPayment = new AlipayPayment("example@example.com", "password");
PaymentContext paymentContext = new PaymentContext(alipayPayment);
paymentContext.pay(200);
```
这样,我们就可以在运行时根据需要更改支付策略,而不必修改现有的代码。