《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:职责链接口
2010-12-25 13:15
549 查看
示例:职责链接口
说明:
(1)、定义
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
(2)、结构
对象:
* Handler:处理对象。定义一个处理请求的接口。(可选)实现后继链。
* ConcreteHandler:具体处理对象。处理它所负责的请求。可访问它的后继者。如果可处理该请求,就处理之;否则将该请求转发给它的后继者。
客户端:
Client:向链上的具体处理者(ConcreteHandler)对象提交请求。
代码:
unit uChainOfResponsibility;
interface
uses
Dialogs;
type
THandler = class
private
FSuccessor: THandler;
public
constructor Create(const ASuccessor: THandler = nil);
//---
procedure HandleRequest; virtual;
end;
TConcreteHandler1 = class(THandler)
public
procedure HandleRequest; override;
end;
TConcreteHandler2 = class(THandler)
public
procedure HandleRequest; override;
end;
implementation
constructor THandler.Create(const ASuccessor: THandler = nil);
begin
FSuccessor := ASuccessor;
end;
procedure THandler.HandleRequest;
begin
if assigned(FSuccessor) then
FSuccessor.HandleRequest
end;
procedure TConcreteHandler1.HandleRequest;
begin
ShowMessage('ConcreteHandler1');
//---
inherited;
end;
procedure TConcreteHandler2.HandleRequest;
begin
ShowMessage('ConcreteHandler2');
//---
inherited;
end;
end.
procedure TForm1.Button1Click(Sender: TObject);
var
AHandler1: TConcreteHandler1;
AHandler2: TConcreteHandler2;
begin
AHandler2 := TConcreteHandler2.Create;
AHandler1 := TConcreteHandler1.Create(AHandler2);
try
AHandler1.HandleRequest;
finally
AHandler1.Free;
AHandler2.Free;
end;
end;
说明:
(1)、定义
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。
(2)、结构
对象:
* Handler:处理对象。定义一个处理请求的接口。(可选)实现后继链。
* ConcreteHandler:具体处理对象。处理它所负责的请求。可访问它的后继者。如果可处理该请求,就处理之;否则将该请求转发给它的后继者。
客户端:
Client:向链上的具体处理者(ConcreteHandler)对象提交请求。
代码:
unit uChainOfResponsibility;
interface
uses
Dialogs;
type
THandler = class
private
FSuccessor: THandler;
public
constructor Create(const ASuccessor: THandler = nil);
//---
procedure HandleRequest; virtual;
end;
TConcreteHandler1 = class(THandler)
public
procedure HandleRequest; override;
end;
TConcreteHandler2 = class(THandler)
public
procedure HandleRequest; override;
end;
implementation
constructor THandler.Create(const ASuccessor: THandler = nil);
begin
FSuccessor := ASuccessor;
end;
procedure THandler.HandleRequest;
begin
if assigned(FSuccessor) then
FSuccessor.HandleRequest
end;
procedure TConcreteHandler1.HandleRequest;
begin
ShowMessage('ConcreteHandler1');
//---
inherited;
end;
procedure TConcreteHandler2.HandleRequest;
begin
ShowMessage('ConcreteHandler2');
//---
inherited;
end;
end.
procedure TForm1.Button1Click(Sender: TObject);
var
AHandler1: TConcreteHandler1;
AHandler2: TConcreteHandler2;
begin
AHandler2 := TConcreteHandler2.Create;
AHandler1 := TConcreteHandler1.Create(AHandler2);
try
AHandler1.HandleRequest;
finally
AHandler1.Free;
AHandler2.Free;
end;
end;
相关文章推荐
- 《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:帮助机制
- 《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:表示请求(使用处理函数)
- 《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:表示请求(使用请求对象)
- 《GOF设计模式》—职责链(CHAIN OF RESPONSIBILITY)—Delphi源码示例:doesNotUnderstand机制
- 《GOF设计模式》—装饰(DECORATOR)—Delphi源码示例:装饰接口
- 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:工厂方法接口
- 《GOF设计模式》—桥接(BRIDGE)—Delphi源码示例:桥接接口
- 《GOF设计模式》—组合(COMPOSITE)—Delphi源码示例:最大化Component接口
- 《GOF设计模式》—模板方法(TEMPLATE METHOD)—Delphi源码示例:模板方法接口
- 《GOF设计模式》—享元(FLYWEIGHT)—Delphi源码示例:享元接口
- 《GOF设计模式》—访问者(VISITOR)—Delphi源码示例:访问者接口
- 《GOF设计模式》—组合(COMPOSITE)—Delphi源码示例:组合接口
- 《GOF设计模式》—代理(PROXY)—Delphi源码示例:代理接口
- 《GOF设计模式》—迭代器 (ITERATOR)—Delphi源码示例:迭代器接口
- 《GOF设计模式》—备忘录(MEMENTO)—Delphi源码示例:备忘录接口
- 《GOF设计模式》—策略(STRATEGY)—Delphi源码示例:策略接口
- 《GOF设计模式》—单件(Singleton)—Delphi源码示例:单件接口(使用全局变量)
- 《GOF设计模式》—命令(COMMAND)—Delphi源码示例:命令接口
- 《GOF设计模式》—适配器(ADAPTER)—Delphi源码示例:适配器接口
- 《GOF设计模式》—单件(Singleton)—Delphi源码示例:单件接口(使用类字段)