当前位置: 首页> 教育> 高考 > 策略模式的小记

策略模式的小记

时间:2025/7/11 8:21:28来源:https://blog.csdn.net/m0_63622279/article/details/141965321 浏览次数:0次

策略模式

    • 策略模式
    • 支付系统【场景再现】
    • 硬编码完成不同的支付策略
    • 使用策略模式,对比不同
      • (1)支付策略接口
      • (2)具体的支付策略类
      • (3)上下文
      • (4)客户端
      • (5)小结

策略模式

定义:策略模式是一种行为设计模式,在运行时改变对象的行为。

目的:定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。

结构:

  • 策略接口:声明了所有支持的所有算法的公共接口。
  • 具体策略:实现了策略接口中声明的算法
  • 上下文:使用某个具体策略实例时,通常上下文会提供一个接口供客户端调用,内部则根据设定的策略来执行相应的算法。

支付系统【场景再现】

场景:支付系统 ,支付系统拥有多种不同的支付策略(信用卡,支付宝支付,微信支付)

在这里插入图片描述

硬编码完成不同的支付策略

依据传入支付策略不同,进行大量的if...else判断,倘若后续加入其他的第三方支付策略,则需要接着if...else代码冗余,耦合度搞,难以扩展(添加新的支付方式,必须修改processPayment方法)

public class Payment {public void processPayment(double amount, String paymentMethod) {if ("creditCard".equals(paymentMethod)) {System.out.println("Paying " + amount + " using credit card.");} else if ("alipay".equals(paymentMethod)) {System.out.println("Paying " + amount + " using Alipay.");} else if ("wechat".equals(paymentMethod)) {System.out.println("Paying " + amount + " using WeChat.");} else {throw new IllegalArgumentException("Unsupported payment method: " + paymentMethod);}}
}

测试类:

public class Client {public static void main(String[] args) {Payment payment = new Payment();payment.processPayment(100.0, "creditCard");payment.processPayment(200.0, "alipay");payment.processPayment(300.0, "wechat");}
}

使用策略模式,对比不同

  • 定义一个支付策略接口
  • 实现具体的支付策略类
  • 创建一个上下文类来使用具体的支付策略

(1)支付策略接口

public interface PaymentStrategy {void pay(double amount);
}

(2)具体的支付策略类

  1. 信用卡支付策略
public class CreditCardPayment implements PaymentStrategy {@Overridepublic void pay(double amount) {System.out.println("Paying " + amount + " using credit card.");}
}
  1. 支付宝策略
public class AlipayPayment implements PaymentStrategy {@Overridepublic void pay(double amount) {System.out.println("Paying " + amount + " using Alipay.");}
}
  1. 微信支付策略
public class WeChatPayment implements PaymentStrategy {@Overridepublic void pay(double amount) {System.out.println("Paying " + amount + " using WeChat.");}
}

(3)上下文

public class PaymentContext {private PaymentStrategy paymentStrategy;// 构造器注入策略public PaymentContext(PaymentStrategy paymentStrategy) {this.paymentStrategy = paymentStrategy;}public void processPayment(double amount) {paymentStrategy.pay(amount);}
}

(4)客户端

public class Client {public static void main(String[] args) {// 创建不同的支付策略PaymentStrategy creditCardPayment = new CreditCardPayment();PaymentStrategy alipayPayment = new AlipayPayment();PaymentStrategy weChatPayment = new WeChatPayment();// 使用不同的支付策略PaymentContext context = new PaymentContext(creditCardPayment);context.processPayment(100.0);context = new PaymentContext(alipayPayment);context.processPayment(200.0);context = new PaymentContext(weChatPayment);context.processPayment(300.0);}
}

(5)小结

策略模式:

  • 定义一个支付策略接口PaymentStrategy
  • 实现三个具体的支付策略类CreditCardPayment,AlipayPaymentWeChatPayment
  • 上下文类PaymentContext,来使用具体的支付策略
  • 客户端测试代码中动态选择不同的支付层策略

策略模式主要关注的是算法或行为的选择和封装。它允许在运行时动态地选择不同的算法或行为。

策略模式适用于需要在运行时选择不同的算法或行为的情况。例如,不同的排序算法、支付方式等。

关键字:策略模式的小记

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: