IT评测·应用市场-qidao123.com技术社区

标题: 【Java】计划模式——策略模式 [打印本页]

作者: 万有斥力    时间: 2024-12-1 19:05
标题: 【Java】计划模式——策略模式
前言

策略模式(Strategy Pattern)是一种行为计划模式,它界说了一系列算法,将每个算法封装起来,并使它们可以相互更换。策略模式让算法的变革独立于利用算法的客户端。通过这种方式,可以避免利用大量的 if-else 或 switch 语句来处置惩罚不同的行为,而是通过策略接口和不同的策略实现类来封装每一种行为。
策略模式的焦点思想是将每个算法(或策略)封装成一个独立的类,并让这些类可以互换利用。这使得系统更加机动、扩展性更强。
1.策略模式的组成



2.策略模式的利用场景



3.策略模式实现案例

3.1 界说策略接口

界说一个支付策略接口 PaymentStrategy,其中包含一个支付方法 pay。
  1. // 策略接口
  2. public interface PaymentStrategy {
  3.     void pay(double amount);
  4. }
复制代码
3.2 实现具体策略类

实现具体的支付策略类,如信用卡支付、支付宝支付和微信支付。
  1. // 具体策略类 - 信用卡支付
  2. public class CreditCardPayment implements PaymentStrategy {
  3.         // 定义一些类变量
  4.     private String cardNumber;
  5.     private String name;
  6.     private String expiryDate;
  7.     public CreditCardPayment(String cardNumber, String name, String expiryDate) {
  8.         this.cardNumber = cardNumber;
  9.         this.name = name;
  10.         this.expiryDate = expiryDate;
  11.     }
  12.     @Override
  13.     public void pay(double amount) {
  14.         System.out.println(amount + "使用信用卡支付");
  15.     }
  16. }
  17. // 具体策略类 - 支付宝支付
  18. public class AlipayPayment implements PaymentStrategy {
  19.         // 定义一些类变量
  20.     private String email;
  21.     public AlipayPayment(String email) {
  22.         this.email = email;
  23.     }
  24.     @Override
  25.     public void pay(double amount) {
  26.         System.out.println(amount + "使用支付宝支付");
  27.     }
  28. }
  29. // 具体策略类 - 微信支付
  30. public class WeChatPayment implements PaymentStrategy {
  31.         // 定义一些类变量
  32.     private String phoneNumber;
  33.     public WeChatPayment(String phoneNumber) {
  34.         this.phoneNumber = phoneNumber;
  35.     }
  36.     @Override
  37.     public void pay(double amount) {
  38.         System.out.println(amount + "使用微信支付");
  39.     }
  40. }
复制代码
3.3 界说上下文类

界说一个上下文类 PaymentContext,用于设置和利用支付策略。
  1. // 上下文类
  2. public class PaymentContext {
  3.     private PaymentStrategy paymentStrategy;
  4.     public PaymentContext(PaymentStrategy paymentStrategy) {
  5.         this.paymentStrategy = paymentStrategy;
  6.     }
  7.     public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
  8.         this.paymentStrategy = paymentStrategy;
  9.     }
  10.     public void executePayment(double amount) {
  11.         paymentStrategy.pay(amount);
  12.     }
  13. }
复制代码
3.4 利用策略示例

在客户端代码中,创建不同的支付策略实例,并在上下文中利用它们。
  1. public class StrategyPatternDemo {
  2.     public static void main(String[] args) {
  3.         double amount = 100.0;
  4.         // 使用信用卡支付
  5.         PaymentStrategy creditCardPayment = new CreditCardPayment("1234-5678-9012-3456", "John", "2024/11/11");
  6.         PaymentContext context = new PaymentContext(creditCardPayment);
  7.         context.executePayment(amount);
  8.         // 使用支付宝支付
  9.         PaymentStrategy alipayPayment = new AlipayPayment("test001@163.com");
  10.         context.setPaymentStrategy(alipayPayment);
  11.         context.executePayment(amount);
  12.         // 使用微信支付
  13.         PaymentStrategy weChatPayment = new WeChatPayment("13412345678");
  14.         context.setPaymentStrategy(weChatPayment);
  15.         context.executePayment(amount);
  16.     }
  17. }
复制代码
输出结果:
  1. 100.0 使用信用卡支付
  2. 100.0 使用支付宝支付
  3. 100.0 使用微信支付
复制代码
4. 策略模式的优缺点

长处

缺点


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4