设计模式循序渐进(1)桥接模式 Bridge

模式解说:
  桥接模式用于将抽象化与实现化脱耦,使二者可以独立变化。由于桥接模式把抽象部分和它的实现部分分离,而且实现类的接口定义与其具体实现分离,这样就可以改变或替换一个程序的实现而不用改变客户端的代码。

模式结构:
  Abstraction:抽象化;定义抽象化基类的接口。保存并维护一个实现化对象的引用。
  RefinedAbstraction:修正抽象化;扩充了抽象化,调整和修正基类对抽象化的定义。
  Implementor:实现化;定义实现化基类的接口。一般来说抽象化基类的接口会调用实现化基类的某个接口。
  ConcreteImplementor:具体实现化;负责完成实现化基类接口的具体实现。

UML结构图:

Delphi语言实现:

unit uBridge;

interface

uses
  SysUtils, Forms, Dialogs;

type
  TImplementor 
= class(TObject)
  
public
    procedure OperationImp; 
virtualabstract;
  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++语言实现:
 

http://www.cnblogs.com/zhangsk/archive/2008/06/05/1214586.html
posted @ 2008-06-05 21:30  treemon  阅读(368)  评论(0编辑  收藏  举报