模式解说:
桥接模式用于将抽象化与实现化脱耦,使二者可以独立变化。由于桥接模式把抽象部分和它的实现部分分离,而且实现类的接口定义与其具体实现分离,这样就可以改变或替换一个程序的实现而不用改变客户端的代码。
模式结构:
Abstraction:抽象化;定义抽象化基类的接口。保存并维护一个实现化对象的引用。
RefinedAbstraction:修正抽象化;扩充了抽象化,调整和修正基类对抽象化的定义。
Implementor:实现化;定义实现化基类的接口。一般来说抽象化基类的接口会调用实现化基类的某个接口。
ConcreteImplementor:具体实现化;负责完成实现化基类接口的具体实现。
UML结构图:
![](https://www.cnblogs.com/images/cnblogs_com/zhangsk/Bridge.png)
Delphi语言实现:
unit uBridge;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
interface
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
uses
SysUtils, Forms, Dialogs;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
type
TImplementor = class(TObject)
public
procedure OperationImp; virtual; abstract;
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
TConcreteImplementorA = class(TImplementor)
public
procedure OperationImp; override;
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
TConcreteImplementorB = class(TImplementor)
public
procedure OperationImp; override;
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
TAbstraction = class(TObject)
private
FImplementor: TImplementor;
procedure SetImplementor(const Value: TImplementor);
public
procedure Operation; virtual;
property Implementor: TImplementor read FImplementor write SetImplementor;
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
TRefinedAbstraction = class(TAbstraction)
public
procedure Operation; override;
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
implementation
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{ TConcreteImplementorA }
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
procedure TConcreteImplementorA.OperationImp;
begin
inherited;
ShowMessage('ConcreteImplementorA.OperationImp');
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{ TConcreteImplementorB }
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
procedure TConcreteImplementorB.OperationImp;
begin
inherited;
ShowMessage('ConcreteImplementorB.OperationImp');
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{ TAbstraction }
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
procedure TAbstraction.Operation;
begin
FImplementor.OperationImp;
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
procedure TAbstraction.SetImplementor(const Value: TImplementor);
begin
FImplementor := Value;
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{ TRefinedAbstraction }
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
procedure TRefinedAbstraction.Operation;
begin
inherited;
//
ShowMessage('Do Other thing
');
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
end.
客户端调用代码
unit Unit1;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
interface
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
type
TForm1 = class(TForm)
btn1: TButton;
procedure btn1Click(Sender: TObject);
private
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{ Private declarations }
public
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{ Public declarations }
end;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
var
Form1: TForm1;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
implementation
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
uses uBridge;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{$R *.dfm}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
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;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
end.
C++语言实现:
http://www.cnblogs.com/zhangsk/archive/2008/06/05/1214586.html