设计模式循序渐进(1)桥接模式 Bridge
模式解说:
桥接模式用于将抽象化与实现化脱耦,使二者可以独立变化。由于桥接模式把抽象部分和它的实现部分分离,而且实现类的接口定义与其具体实现分离,这样就可以改变或替换一个程序的实现而不用改变客户端的代码。
模式结构:
Abstraction:抽象化;定义抽象化基类的接口。保存并维护一个实现化对象的引用。
RefinedAbstraction:修正抽象化;扩充了抽象化,调整和修正基类对抽象化的定义。
Implementor:实现化;定义实现化基类的接口。一般来说抽象化基类的接口会调用实现化基类的某个接口。
ConcreteImplementor:具体实现化;负责完成实现化基类接口的具体实现。
UML结构图:

Delphi语言实现:
unit uBridge;
interface
uses
SysUtils, Forms, Dialogs;
type
TImplementor = class(TObject)
public
procedure OperationImp; virtual; abstract;
end;
TConcreteImplementorA = class(TImplementor)
public
procedure OperationImp; override;
end;
TConcreteImplementorB = class(TImplementor)
public
procedure OperationImp; override;
end;

TAbstraction = class(TObject)
private
FImplementor: TImplementor;
procedure SetImplementor(const Value: TImplementor);
public
procedure Operation; virtual;
property Implementor: TImplementor read FImplementor write SetImplementor;
end;
TRefinedAbstraction = class(TAbstraction)
public
procedure Operation; override;
end;
implementation


{ TConcreteImplementorA }
procedure TConcreteImplementorA.OperationImp;
begin
inherited;
ShowMessage('ConcreteImplementorA.OperationImp');
end;
{ TConcreteImplementorB }
procedure TConcreteImplementorB.OperationImp;
begin
inherited;
ShowMessage('ConcreteImplementorB.OperationImp');
end;
{ TAbstraction }
procedure TAbstraction.Operation;
begin
FImplementor.OperationImp;
end;
procedure TAbstraction.SetImplementor(const Value: TImplementor);
begin
FImplementor := Value;
end;
{ TRefinedAbstraction }
procedure TRefinedAbstraction.Operation;
begin
inherited;
//
ShowMessage('Do Other thing
');
end;
end.客户端调用代码
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses uBridge;
{$R *.dfm}
procedure TForm1.btn1Click(Sender: TObject);
var
Abstraction: TAbstraction;
Implementor: TImplementor;
begin
Abstraction := TRefinedAbstraction.Create;
Implementor := TConcreteImplementorA.Create;
Abstraction.Implementor := Implementor;
Abstraction.Operation;
Abstraction.Implementor.Free;
Abstraction.Free;
end;
end.
C++语言实现:

浙公网安备 33010602011771号