《GOF设计模式》—策略(STRATEGY)—Delphi源码示例:策略接口
来源:互联网 发布:oracle hr 数据库 编辑:程序博客网 时间:2024/06/07 06:24
示例:策略接口
说明:
(1)、定义
定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。
(2)、结构
策略:
Strategy:定义所有支持的算法的公共接口。Context使用这个接口来调用某ConcreteStrategy定义的算法。
ConcreteStrategy:具体策略。以Strategy接口实现某具体算法。
上下文:
Context:用一个ConcreteStrategy对象来配置。维护一个对Strategy对象的引用。可定义一个接口来让Stategy访问它的数据。
代码:
unit uStrategy;
interface
uses Dialogs;
type
TStrategy = class
public
procedure AlgorithmInterface; virtual; abstract;
end;
TConcreteStrategyA = class(TStrategy)
public
procedure AlgorithmInterface; override;
end;
TConcreteStrategyB = class(TStrategy)
public
procedure AlgorithmInterface; override;
end;
TConcreteStrategyC = class(TStrategy)
public
procedure AlgorithmInterface; override;
end;
TContext = class
private
FStrategy: TStrategy;
procedure SetStrategy(Value: TStrategy);
public
destructor Destroy; override;
//---
procedure ContextInterface;
//---
property Strategy: TStrategy read FStrategy write SetStrategy;
end;
procedure Test;
implementation
procedure Test;
var
AContext: TContext;
//---
function _GetStrategy(AKey: char): TStrategy;
begin
case AKey of
'A': Result := TConcreteStrategyA.Create;
'B': Result := TConcreteStrategyB.Create;
'C': Result := TConcreteStrategyC.Create;
else
Result := TConcreteStrategyA.Create;
end;
end;
begin
AContext := TContext.Create;
try
AContext.Strategy := _GetStrategy('A');
AContext.ContextInterface;
finally
AContext.Free;
end;
end;
procedure TConcreteStrategyA.AlgorithmInterface;
begin
showmessage('Strategy A');
end;
procedure TConcreteStrategyB.AlgorithmInterface;
begin
showmessage('Strategy B');
end;
procedure TConcreteStrategyC.AlgorithmInterface;
begin
showmessage('Strategy C');
end;
procedure TContext.ContextInterface;
begin
if assigned(FStrategy) then
FStrategy.AlgorithmInterface;
end;
destructor TContext.Destroy;
begin
if assigned(FStrategy) then
FStrategy.Free;
//---
inherited;
end;
procedure TContext.SetStrategy(Value: TStrategy);
begin
if assigned(FStrategy) then
FStrategy.Free;
FStrategy := Value;
end;
end.
- 《GOF设计模式》—策略(STRATEGY)—Delphi源码示例:策略接口
- 《GOF设计模式》—策略(STRATEGY)—Delphi源码示例:文本换行
- GOF设计模式之STRATEGY(策略)
- 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:工厂方法接口
- 《GOF设计模式》—抽象工厂(Abstract Factory)—Delphi源码示例:抽象工厂接口
- 《GOF设计模式》—生成器(Builder)—Delphi源码示例:生成器接口
- 《GOF设计模式》—原型(Prototype)—Delphi源码示例:原型接口
- 《GOF设计模式》—适配器(ADAPTER)—Delphi源码示例:适配器接口
- 《GOF设计模式》—桥接(BRIDGE)—Delphi源码示例:桥接接口
- 《GOF设计模式》—组合(COMPOSITE)—Delphi源码示例:组合接口
- 《GOF设计模式》—组合(COMPOSITE)—Delphi源码示例:最大化Component接口
- 《GOF设计模式》—装饰(DECORATOR)—Delphi源码示例:装饰接口
- 《GOF设计模式》—享元(FLYWEIGHT)—Delphi源码示例:享元接口
- 《GOF设计模式》—代理(PROXY)—Delphi源码示例:代理接口
- 《GOF设计模式》—命令(COMMAND)—Delphi源码示例:命令接口
- 《GOF设计模式》—解释器 (INTERPRETER)—Delphi源码示例:解释器接口
- 《GOF设计模式》—迭代器 (ITERATOR)—Delphi源码示例:迭代器接口
- 《GOF设计模式》—中介者 (MEDIATOR)—Delphi源码示例:中介者接口
- 参数个数可变的函数
- 人工智能传奇—关于AI起源与发展的故事
- 人类的 POWER IBM 的芯片制造历史
- 3栏布局
- 程序员的十层楼
- 《GOF设计模式》—策略(STRATEGY)—Delphi源码示例:策略接口
- struts2国际化开发
- memberShip资料总结
- Huffman编码
- solaris 网络设置
- 《GOF设计模式》—策略(STRATEGY)—Delphi源码示例:文本换行
- LAMP系列文章之:泛泛而谈LAMP(一)
- 会忘记,会过去
- PHP 中使用JavaScript时,alert函数乱码问题,终极解决方案