12 策略模式

不好的设计

改良,但还是不好(父接口有多个):



策略模式:

多用组合,少用继承!!!!!!




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
策略模式是一种行为型设计模式,它允许在运行时根据需要更改算法或策略。在策略模式中,我们将算法封装在独立的类中,使它们可以互换。 下面是一个用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); ``` 这样,我们就可以在运行时根据需要更改支付策略,而不必修改现有的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值