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

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

相关推荐
前端熊猫1 小时前
排序算法学习笔记
笔记·学习·排序算法
auspark1 小时前
macos下cocoapods的学习
学习·macos·cocoapods
朔北之忘 Clancy2 小时前
2022 年 12 月青少年软编等考 C 语言五级真题解析
c语言·开发语言·c++·学习·算法·青少年编程·题解
千里码!2 小时前
java23种设计模式-模板方法模式
java·设计模式·模板方法模式
攻城狮7号2 小时前
【第八节】C++设计模式(结构型模式)-Decorator(装饰器)模式
c++·设计模式·装饰器模式
宋隽颢3 小时前
STM32学习【4】ARM汇编(够用)
arm开发·stm32·学习
我哪天都没空3 小时前
【蓝桥杯嵌入式】各模块学习总结
笔记·学习·蓝桥杯
ILUUSION_S3 小时前
学习路程五 向量数据库Milvus操作
数据库·python·学习·langchain·milvus
谏君之3 小时前
编写第一个 C++ 程序 – Hello World 示例
开发语言·c++·单片机·学习
北城望戈4 小时前
工作中遇到的设计模式整理
java·设计模式