• Java设计模式中策略模式


    策略模式是一种行为型设计模式,它允许在运行时选择算法的行为。这种模式定义了一系列算法,并使这些算法可以相互替换,使得算法的变化独立于使用算法的客户。

    以下是策略模式的一般结构:

    1. Context(上下文):负责维护一个对Strategy对象的引用,并且将客户请求委托给Strategy对象。

    2. Strategy(策略):定义所有支持的算法的公共接口。通常是一个接口或者抽象类

    3. ConcreteStrategy(具体策略):实现了Strategy接口的具体算法实现。

    下面是一个简单的Java示例,演示了如何使用策略模式:

    // 1. Strategy
    interface PaymentStrategy {
        void pay(double amount);
    }
    
    // 2. ConcreteStrategy
    class CreditCardPayment implements PaymentStrategy {
        private String cardNumber;
        private String expirationDate;
        private String cvv;
    
        public CreditCardPayment(String cardNumber, String expirationDate, String cvv) {
            this.cardNumber = cardNumber;
            this.expirationDate = expirationDate;
            this.cvv = cvv;
        }
    
        @Override
        public void pay(double amount) {
            System.out.println("Paid $" + amount + " using Credit Card");
        }
    }
    
    class PayPalPayment implements PaymentStrategy {
        private String email;
        private String password;
    
        public PayPalPayment(String email, String password) {
            this.email = email;
            this.password = password;
        }
    
        @Override
        public void pay(double amount) {
            System.out.println("Paid $" + amount + " using PayPal");
        }
    }
    
    // 3. Context
    class ShoppingCart {
        private PaymentStrategy paymentStrategy;
    
        public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
            this.paymentStrategy = paymentStrategy;
        }
    
        public void checkout(double amount) {
            paymentStrategy.pay(amount);
        }
    }
    
    // 4. 使用示例
    public class Main {
        public static void main(String[] args) {
            // 创建购物车对象
            ShoppingCart cart = new ShoppingCart();
    
            // 设置支付策略为信用卡
            cart.setPaymentStrategy(new CreditCardPayment("1234-5678-9012", "10/25", "123"));
    
            // 结账
            cart.checkout(100.0);
    
            // 设置支付策略为PayPal
            cart.setPaymentStrategy(new PayPalPayment("example@example.com", "password"));
    
            // 结账
            cart.checkout(200.0);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    在这个示例中,PaymentStrategy是策略接口,CreditCardPayment和PayPalPayment是具体策略。ShoppingCart是上下文,它持有一个对PaymentStrategy的引用,并在结账时调用支付方法。通过更改支付策略,我们可以在不修改ShoppingCart的情况下选择不同的支付方式。

  • 相关阅读:
    (Java高级教程)第一章Java多线程基础-第一节2:Thread类
    1.Node.js-函数和匿名函数的用法
    删除排序数组中的重复项 II
    【Command模式】C++设计模式——命令模式
    vue slot插槽的使用
    解密Prompt系列12. LLM Agent零微调范式 ReAct & Self Ask
    node-sass报错无法安装
    C 运算符
    JVM原理(三):JVM对象回收判定机制与回收算法
    网络安全能力成熟度模型介绍
  • 原文地址:https://blog.csdn.net/yang_guang3/article/details/138158007