策略模式就是:把会变的行为抽出来,用接口定义,通过组合方式插入对象中,运行时可以随时替换。
策略模式适合用在行为(算法)需要灵活切换或复用的场景
接口
package org.example.payment;
public interface PaymentStrategy {
void pay(int amount);
}
实现类
package org.example.payment;
public class AlipayStrategy implements PaymentStrategy{
@Override
public void pay(int amount) {
System.out.println("使用支付宝支付" + amount + "元");
}
}
package org.example.payment;
public class WeChatPayStrategy implements PaymentStrategy{
@Override
public void pay(int amount) {
System.out.println("微信支付" + amount + "元");
}
}
package org.example.payment;
public class CreditCardStrategy implements PaymentStrategy{
@Override
public void pay(int amount) {
System.out.println("信用卡支付" + amount + "元");
}
}
上下文
package org.example.payment;
public class PaymentContext {
private PaymentStrategy paymentStrategy;
public PaymentContext(PaymentStrategy paymentStrategy) {
this.paymentStrategy = paymentStrategy;
}
// 切换策略
public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
this.paymentStrategy = paymentStrategy;
}
public void pay(int amount) {
paymentStrategy.pay(amount);
}
}
Main
package org.example.payment;
public class Main {
public static void main(String[] args) {
PaymentContext paymentContext = new PaymentContext(new AlipayStrategy());
paymentContext.pay(10);
paymentContext.setPaymentStrategy(new WeChatPayStrategy());
paymentContext.pay(20);
paymentContext.setPaymentStrategy(new CreditCardStrategy());
paymentContext.pay(30);
}
}