《GOF设计模式》—装饰(DECORATOR)—Delphi源码示例:装饰接口
2010-12-04 14:54
471 查看
示例:装饰接口
说明:
(1)、定义
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。
(2)、结构
组件:
Component:组件。定义一个对象接口,可以给这些对象动态地添加职责。
ConcreteComponent:具体组件。定义一个对象,可以给这个对象添加一些职责。
装饰组件:
Decorator:装饰组件。维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。
ConcreteDecorator:具体装饰组件。向组件添加职责。
协作:
Decorator将请求转发给它的Component对象,并有可能在转发请求前后执行一些附加的动作。
代码:
unit uDecortor;
interface
uses Dialogs;
type
TComponent = class
public
procedure Operation; virtual; abstract;
end;
TConcreteComponent = class(TComponent)
public
procedure Operation; override;
end;
TDecorator = class(TComponent)
private
FComponent: TComponent;
public
constructor Create(const AComponent: TComponent);
destructor Destroy; override;
//---
procedure Operation; override;
end;
TConcreteDecoratorA = class(TDecorator)
private
FAddedState: string;
public
constructor Create(const AComponent: TComponent; const AAddedState: string);
//---
procedure Operation; override;
end;
TConcreteDecoratorB = class(TDecorator)
private
procedure AddedBehavior;
public
procedure Operation; override;
end;
implementation
constructor TDecorator.Create(const AComponent: TComponent);
begin
inherited Create;
//---
FComponent := AComponent;
end;
destructor TDecorator.Destroy;
begin
if Assigned(FComponent) then
FComponent.Free;
//---
inherited;
end;
procedure TDecorator.Operation;
begin
FComponent.Operation;
end;
procedure TConcreteComponent.Operation;
begin
ShowMessage('ConcreteComponent');
end;
constructor TConcreteDecoratorA.Create(const AComponent: TComponent;
const AAddedState: string);
begin
inherited Create(AComponent);
//---
FAddedState := AAddedState;
end;
procedure TConcreteDecoratorA.Operation;
begin
inherited;
//---
ShowMessage(FAddedState);
end;
procedure TConcreteDecoratorB.AddedBehavior;
begin
ShowMessage('AddedBehavior');
end;
procedure TConcreteDecoratorB.Operation;
begin
inherited;
//---
AddedBehavior;
end;
end.
procedure TForm1.Button1Click(Sender: TObject);
var
AComponent: TComponent;
begin
AComponent := TConcreteDecoratorA.Create(TConcreteDecoratorB.Create(TConcreteComponent.Create), '123');
AComponent.Operation;
AComponent.Free;
end;
说明:
(1)、定义
动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。
(2)、结构
组件:
Component:组件。定义一个对象接口,可以给这些对象动态地添加职责。
ConcreteComponent:具体组件。定义一个对象,可以给这个对象添加一些职责。
装饰组件:
Decorator:装饰组件。维持一个指向Component对象的指针,并定义一个与Component接口一致的接口。
ConcreteDecorator:具体装饰组件。向组件添加职责。
协作:
Decorator将请求转发给它的Component对象,并有可能在转发请求前后执行一些附加的动作。
代码:
unit uDecortor;
interface
uses Dialogs;
type
TComponent = class
public
procedure Operation; virtual; abstract;
end;
TConcreteComponent = class(TComponent)
public
procedure Operation; override;
end;
TDecorator = class(TComponent)
private
FComponent: TComponent;
public
constructor Create(const AComponent: TComponent);
destructor Destroy; override;
//---
procedure Operation; override;
end;
TConcreteDecoratorA = class(TDecorator)
private
FAddedState: string;
public
constructor Create(const AComponent: TComponent; const AAddedState: string);
//---
procedure Operation; override;
end;
TConcreteDecoratorB = class(TDecorator)
private
procedure AddedBehavior;
public
procedure Operation; override;
end;
implementation
constructor TDecorator.Create(const AComponent: TComponent);
begin
inherited Create;
//---
FComponent := AComponent;
end;
destructor TDecorator.Destroy;
begin
if Assigned(FComponent) then
FComponent.Free;
//---
inherited;
end;
procedure TDecorator.Operation;
begin
FComponent.Operation;
end;
procedure TConcreteComponent.Operation;
begin
ShowMessage('ConcreteComponent');
end;
constructor TConcreteDecoratorA.Create(const AComponent: TComponent;
const AAddedState: string);
begin
inherited Create(AComponent);
//---
FAddedState := AAddedState;
end;
procedure TConcreteDecoratorA.Operation;
begin
inherited;
//---
ShowMessage(FAddedState);
end;
procedure TConcreteDecoratorB.AddedBehavior;
begin
ShowMessage('AddedBehavior');
end;
procedure TConcreteDecoratorB.Operation;
begin
inherited;
//---
AddedBehavior;
end;
end.
procedure TForm1.Button1Click(Sender: TObject);
var
AComponent: TComponent;
begin
AComponent := TConcreteDecoratorA.Create(TConcreteDecoratorB.Create(TConcreteComponent.Create), '123');
AComponent.Operation;
AComponent.Free;
end;
相关文章推荐
- 《GOF设计模式》—装饰(DECORATOR)—Delphi源码示例:图形用户界面组件
- 《GOF设计模式》—装饰(DECORATOR)—Delphi源码示例:改变对象内核
- 《GOF设计模式》—策略(STRATEGY)—Delphi源码示例:策略接口
- 《GOF设计模式》—适配器(ADAPTER)—Delphi源码示例:适配器接口
- 《GOF设计模式》—迭代器 (ITERATOR)—Delphi源码示例:迭代器接口
- 《GOF设计模式》—备忘录(MEMENTO)—Delphi源码示例:备忘录接口
- 《GOF设计模式》—原型(Prototype)—Delphi源码示例:原型接口
- 《GOF设计模式》—单件(Singleton)—Delphi源码示例:单件接口(使用全局变量)
- 《GOF设计模式》—桥接(BRIDGE)—Delphi源码示例:桥接接口
- 《GOF设计模式》—生成器(Builder)—Delphi源码示例:生成器接口
- 《GOF设计模式》—备忘录(MEMENTO)—Delphi源码示例:一个反映备忘录模式的迭代接口
- 《GOF设计模式》—状态(STATE)—Delphi源码示例:状态接口
- 《GOF设计模式》—单件(Singleton)—Delphi源码示例:单件接口(使用类字段)
- 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:工厂方法接口
- 《GOF设计模式》—观察者(OBSERVER)—Delphi源码示例:观察者接口
- 《GOF设计模式》—桥接(BRIDGE)—Delphi源码示例:桥接接口
- 《GOF设计模式》—中介者 (MEDIATOR)—Delphi源码示例:中介者接口
- 《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:职责链接口
- 《GOF设计模式》—解释器 (INTERPRETER)—Delphi源码示例:解释器接口
- 《GOF设计模式》—模板方法(TEMPLATE METHOD)—Delphi源码示例:模板方法接口