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

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

相关推荐
mykj15515 小时前
英语单词APP解锁学习新方式,智能高效背单词
学习·英语单词app
知识分享小能手6 小时前
深度学习学习教程,从入门到精通,深度学习中的正则化 — 完整知识点与代码示例(7)
人工智能·深度学习·学习
~kiss~7 小时前
Agent 的 未来吗?String: An Agentic OS Where Every App Is a Markdown File
学习
HugoStudio_SWAN8 小时前
洛谷 B4450 / B3867 / B3923 智慧购物、储蓄与做题——从程序到生活
c++·学习·程序人生·算法·生活
UIU11410 小时前
scanf与cout的误区:探究其内部的机制
c++·学习·c#·scanf
新知图书12 小时前
第8章 多智能体协同
人工智能·设计模式·智能体
zyf10441614 小时前
暑期实践日志 Day48:复盘大纲与知识点对照表,系统汇总整理成果
学习·计算机网络·剪辑·暑期实践·课题任务
京师20万禁军教头15 小时前
39面向对象(高级)-设计模式
java·开发语言·设计模式
m4Rk_15 小时前
【论文阅读】Agent 记忆机制(61):CFGM——用粗到细的记忆落地贯通经验采集、知识蒸馏与在线纠错
论文阅读·人工智能·学习·开源·github
边境悍匪15 小时前
蜗牛学苑 Java 智能体学习 Day33|AOP 面向切面编程、日志技术思维导图复盘
学习