行为型模式 - 策略模式 (Strategy Pattern)
策略模式
·
行为型模式 - 策略模式 (Strategy Pattern)
策略模式定义了一系列的算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端。以下是几个策略模式的经典案例。
// 一个经典的例子,支付方式、微信、支付宝、银联
// 1. 策略接口
public interface PaymentStrategy {
void pay(double amount);
}
// 2.具体策略实现
// 微信
public class WeChatPayment implements PaymentStrategy {
@Override
public void pay(double amount) {
System.out.println("使用微信支付:¥" + amount);
// 这里可以调用微信支付的 API
}
}
// 支付宝
public class AliPayment implements PaymentStrategy {
@Override
public void pay(double amount) {
System.out.println("使用支付宝支付:¥" + amount);
// 这里可以调用支付宝的 API
}
}
// 银联
public class UnionPayment implements PaymentStrategy {
@Override
public void pay(double amount) {
System.out.println("使用银联支付:¥" + amount);
// 这里可以调用银联支付的 API
}
}
// 这么做的好处就是,假设以后多来一种支付方式,如PayPal啊,抖音支付啊,京东支付,随便你怎么加只需要创建一个对应的实现即可,对拓展非常友好
// 3. 然后是一个上下文 Context
public class PaymentContext {
private PaymentStrategy paymentStrategy;
// 设置支付策略
public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
this.paymentStrategy = paymentStrategy;
}
// 执行支付
public void executePayment(double amount) {
if (paymentStrategy == null) {
throw new IllegalStateException("支付策略未设置");
}
paymentStrategy.pay(amount);
}
}
//4. 客户端这么使用
//创建上下文,使用哪种方式,由使用者自主选择,非常灵活
public class PaymentDemo {
public static void main(String[] args) {
// 创建支付上下文
PaymentContext context = new PaymentContext();
// 使用微信支付
context.setPaymentStrategy(new WeChatPayment());
context.executePayment(100.0);
// 使用支付宝支付
context.setPaymentStrategy(new AliPayment());
context.executePayment(200.0);
// 使用银联支付
context.setPaymentStrategy(new UnionPayment());
context.executePayment(300.0);
}
}
更多推荐


所有评论(0)