行为模式9.策略模式------促销活动设计方案

行为型模式

  1. 模板方法模式(Template Method Pattern)
  2. 命令模式(Command Pattern)
  3. 迭代器模式(Iterator Pattern)
  4. 观察者模式(Observer Pattern)
  5. 中介者模式(Mediator Pattern)
  6. 备忘录模式(Memento Pattern)
  7. 解释器模式(Interpreter Pattern)
  8. 状态模式(State Pattern)
  9. 策略模式(Strategy Pattern)
  10. 职责链模式(Chain of Responsibility Pattern)
  11. 访问者模式(Visitor Pattern)

策略模式是一种行为设计模式,它允许在运行时选择算法的行为。这种模式定义了一系列的算法,将每一个算法封装起来,并且使它们可以相互替换。通过这种方式,客户端可以在不改变其代码的情况下改变使用的算法。

在策略模式中,通常会有三个角色:

  1. 上下文(Context):它持有一个指向策略对象的引用,负责将请求委托给这个对象。
  2. 策略(Strategy):它是一个接口或抽象类,定义了一个算法族,使它们可以相互替换。
  3. 具体策略(Concrete Strategy):实现了策略接口的具体算法。

这种模式使得算法可以独立于其使用者而变化,同时也简化了算法的替换和扩展。通常情况下,策略模式在需要多种算法选择时非常有用,例如排序算法、数据压缩等。

下面举个实际的例子加深对策略模式的理解

示例

假设我们正在开发一个电商平台,需要根据不同的促销活动计算最终的价格。这是一个很好的策略模式的应用场景。

首先,我们定义一个 `PriceCalculator` 接口作为策略接口,其中包含了计算最终价格的方法。然后,我们创建具体的促销策略类,比如 `BlackFridayStrategy``CyberMondayStrategy``ClearanceSaleStrategy` 等,它们实现了 `PriceCalculator` 接口,并分别实现了不同的价格计算逻辑。

接着,我们有一个 `Checkout` 类作为上下文类,它接收不同的促销策略,并在结账时执行相应的策略来计算最终价格。

下面是一个简化的示例:

策略接口,每种策略都需要实现这个接口,并重写接口里的方法

复制代码
// 定义策略接口  
interface PriceCalculator {  
    double calculateFinalPrice(double initialPrice);  
}  

策略类,就是具体的策略,比如这里的每一种活动就是策略,再具体点就是周年庆活动的折扣和端午节活动的折扣是两种不同的策略

复制代码
// 具体策略类  
class BlackFridayStrategy implements PriceCalculator {  
    public double calculateFinalPrice(double initialPrice) {  
        return initialPrice * 0.5; // 50% off  
    }  
}  

class CyberMondayStrategy implements PriceCalculator {  
    public double calculateFinalPrice(double initialPrice) {  
        return initialPrice * 0.6; // 40% off  
    }  
}  

上下文类,这个类其实类似一个包装袋,袋子都是同一个袋子,但是袋子里的策略可以是不同的,最终运行的方法就是每个策略类里面重写的接口的方法

复制代码
// 上下文类  
class Checkout {  
    private PriceCalculator priceCalculator;  
  
    public Checkout(PriceCalculator priceCalculator) {  
        this.priceCalculator = priceCalculator;  
    }  
  
    public double calculateTotal(double initialPrice) {  
        return priceCalculator.calculateFinalPrice(initialPrice);  
    }  
}  

使用方式

复制代码
// 使用示例  
public class ShoppingCart {  
    public static void main(String[] args) {  
        double initialPrice = 100.0;  
  
        Checkout checkout = new Checkout(new BlackFridayStrategy());  
        System.out.println("Final price on Black Friday: $" + checkout.calculateTotal(initialPrice));  
  
        checkout = new Checkout(new CyberMondayStrategy());  
        System.out.println("Final price on Cyber Monday: $" + checkout.calculateTotal(initialPrice));  
    }  
}  

为了更好理解策略模式,一定要去代码里面运行一下感受一下策略模式的优雅

相关推荐
气概3 小时前
法奥机器人学习使用
学习·junit·机器人
Qhumaing3 小时前
C++学习:【PTA】数据结构 7-1 实验7-1(最小生成树-Prim算法)
c++·学习·算法
好大哥呀3 小时前
Java Web的学习路径
java·前端·学习
梦雨羊5 小时前
Base-NLP学习
人工智能·学习·自然语言处理
丝斯20115 小时前
AI学习笔记整理(42)——NLP之大规模预训练模型Transformer
人工智能·笔记·学习
小猪佩奇TONY6 小时前
Linux 内核学习(14) --- linux x86-32 虚拟地址空间
linux·学习
副露のmagic6 小时前
更弱智的算法学习 day28
学习
ha20428941946 小时前
Linux操作系统学习记录之---TcpSocket
linux·网络·c++·学习
凉、介8 小时前
深入 QEMU Guest Agent:虚拟机内外通信的隐形纽带
c语言·笔记·学习·嵌入式·虚拟化
崇山峻岭之间8 小时前
Matlab学习记录31
开发语言·学习·matlab