示例:桥接接口
说明:
(1)、定义
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
(2)、结构
抽象类:
Abstraction:定义抽象类的接口。维护一个指向Implementor类型对象的指针。
RefinedAbstraction:扩充由Abstraction定义的接口。
实现类:
Implementor:定义实现类的接口,该接口不一定要与Abstraction的接口完全一致;事实上这两个接口可以完全不同。一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。
ConcreteImplementor:实现Implementor接口并定义它的具体实现。
协作:
Abstraction将client的请求转发给它的Implementor对象。
代码:
unit uBridge;
interface
uses
Dialogs;
type
TImplementor = class;
{抽象类}
TAbstraction = class
private
FImp: TImplementor;
public
constructor Create(AImplementor: TImplementor);
//---
procedure Operation; virtual;
end;
TRefinedAbstraction = class(TAbstraction)
public
procedure Operation; override;
end;
{实现类}
TImplementor = class
procedure OperationImp; virtual; abstract;
end;
TConcreteImplementorA = class(TImplementor)
procedure OperationImp; override;
end;
TConcreteImplementorB = class(TImplementor)
procedure OperationImp; override;
end;
implementation
constructor TAbstraction.Create(AImplementor: TImplementor);
begin
FImp := AImplementor;
end;
procedure TAbstraction.Operation;
begin
FImp.OperationImp;
end;
procedure TConcreteImplementorA.OperationImp;
begin
ShowMessage('ImplementorA');
end;
procedure TConcreteImplementorB.OperationImp;
begin
ShowMessage('ImplementorB');
end;
procedure TRefinedAbstraction.Operation;
begin
inherited;
//---
ShowMessage('Refined');
end;
end.
procedure TForm1.Button1Click(Sender: TObject);
var
AImplementor: TImplementor;
AAbstraction: TAbstraction;
begin
AImplementor := TConcreteImplementorA.Create;
AAbstraction := TRefinedAbstraction.Create(AImplementor);
try
AAbstraction.Operation;
finally
AAbstraction.Free;
AImplementor.Free;
end;
end;