行为模式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));  
    }  
}  

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

相关推荐
rui锐rui17 分钟前
大数据学习6:Sqoop数据迁移工具
大数据·学习·sqoop
psybrain25 分钟前
脑科学圈| 利用眼动追踪评估演讲情境下焦虑障碍儿童的注视行为
学习·心理学·脑科学·课堂·焦虑·儿童青少年·眼动
序属秋秋秋2 小时前
《C++初阶之内存管理》【内存分布 + operator new/delete + 定位new】
开发语言·c++·笔记·学习
许白掰2 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
B1nna3 小时前
Docker学习
学习·docker·容器
Hellyc7 小时前
基于模板设计模式开发优惠券推送功能以及对过期优惠卷进行定时清理
java·数据库·设计模式·rocketmq
追烽少年x7 小时前
设计模式---观察者模式(发布-订阅模式)
网络·设计模式
秋田君7 小时前
深入理解JavaScript设计模式之命令模式
javascript·设计模式·命令模式
花好月圆春祺夏安7 小时前
基于odoo17的设计模式详解---享元模式
设计模式·享元模式
promising-w9 小时前
【运算放大器专题】基础篇
嵌入式硬件·学习