Delphi 语言 策略模式应用示例

Delphi阿木 发布于 2025-06-18 6 次阅读


Delphi 语言策略模式应用示例

策略模式是一种行为设计模式,它定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。本文将围绕Delphi语言,通过一个示例来展示策略模式的应用。

策略模式概述

策略模式的主要目的是将算法的封装与使用算法的客户解耦。在策略模式中,通常包含以下角色:

- Context(环境类):维护一个策略对象的引用,并负责调用策略对象的方法。

- Strategy(策略接口):定义所有支持的算法的公共接口。

- ConcreteStrategy(具体策略类):实现Strategy接口,定义所有支持的算法。

示例:计算折扣

假设我们有一个电商系统,需要根据不同的折扣策略计算商品的价格。以下是一个使用策略模式的Delphi示例。

1. 定义策略接口

我们定义一个策略接口,用于计算折扣。

delphi

interface

uses


SysUtils;

type


// 折扣策略接口


IDiscountStrategy = interface


['{F7F8E3C0-9F3C-4E7A-9C0C-5C8C7C7C9F9F}']


function CalculateDiscount(OriginalPrice: Double): Double;


end;


2. 实现具体策略类

接下来,我们实现几个具体的折扣策略类。

delphi

type


// 固定折扣策略


TFixedDiscountStrategy = class(TInterfacedObject, IDiscountStrategy)


private


FDiscountRate: Double;


public


constructor Create(ADiscountRate: Double);


function CalculateDiscount(OriginalPrice: Double): Double;


end;

// 满减折扣策略


TFullReductionDiscountStrategy = class(TInterfacedObject, IDiscountStrategy)


private


FFullPrice: Double;


FReductionAmount: Double;


public


constructor Create(AFullPrice, AReductionAmount: Double);


function CalculateDiscount(OriginalPrice: Double): Double;


end;


3. 实现环境类

环境类负责维护一个策略对象的引用,并调用策略对象的方法。

delphi

type


// 环境类


TShoppingCart = class


private


FStrategy: IDiscountStrategy;


public


constructor Create;


destructor Destroy; override;


procedure SetStrategy(AStrategy: IDiscountStrategy);


function CalculateFinalPrice(OriginalPrice: Double): Double;


end;


4. 使用策略模式

现在,我们可以创建一个购物车对象,并设置不同的折扣策略来计算最终价格。

delphi

var


ShoppingCart: TShoppingCart;


FixedDiscountStrategy: TFixedDiscountStrategy;


FullReductionDiscountStrategy: TFullReductionDiscountStrategy;


begin


ShoppingCart := TShoppingCart.Create;


try


// 设置固定折扣策略


FixedDiscountStrategy := TFixedDiscountStrategy.Create(0.1); // 10%折扣


ShoppingCart.SetStrategy(FixedDiscountStrategy);


WriteLn('Final Price with Fixed Discount: ', ShoppingCart.CalculateFinalPrice(100));

// 设置满减折扣策略


FullReductionDiscountStrategy := TFullReductionDiscountStrategy.Create(200, 20); // 满减20元


ShoppingCart.SetStrategy(FullReductionDiscountStrategy);


WriteLn('Final Price with Full Reduction Discount: ', ShoppingCart.CalculateFinalPrice(100));


finally


ShoppingCart.Free;


end;


end.


5. 运行结果

运行上述代码,将输出:


Final Price with Fixed Discount: 90


Final Price with Full Reduction Discount: 80


总结

通过上述示例,我们可以看到策略模式在Delphi语言中的应用。策略模式使得算法的封装与使用算法的客户解耦,提高了代码的灵活性和可维护性。在实际项目中,我们可以根据需求定义更多的折扣策略,并通过环境类灵活地切换不同的策略,从而实现更加灵活的折扣计算功能。