設計模式、用Delphi實現---->Builder模式 (轉)

worldblog發表於2007-12-11
設計模式、用Delphi實現----&gtBuilder模式 (轉)[@more@]

 

 

Builder

起源

中的Builder模式在基本Builder模式進行了擴充套件。更多Builder模式的資料請參閱 [Gam+]:namespace prefix = o ns = "urn:schemas--com::office" />

目的

將一個複雜的的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示

動機

一個生成器(Builder)與抽角工廠(Abstract Factory)從概念上來看有點類似。但不同的是,生成器將單一複雜的類的各個部件透過引用不同的構造器生成,然面抽象工廠則讓你建立整個具體的類。比如說:一個建築工可以構造房子、別墅、辦公室。你可僱用不同的建築工來構造磚房、木房。雖然你可指定房子的形狀、大小。而其他肋手用來構造房子的部門、並非全部。比如構建窗了,門,停車場。

應用

 

下面的例子先引入了一個抽象類TabstractFormBuilder和它的兩個具體子類TredFormBuilder、TblueFormBuilder。TabstractFormBuilder宣告瞭一些類的構造器

 

type

  TAbstractFormBuilder = class

  private

  FForm: TForm;

  procedure BuilderFormClose(Sender: T; var Action: TCloseAction);

  protected

  function GetForm: TForm; virtual;

  public

  procedure CreateForm(AOwner: TComponent); virtual;

  procedure CreateSpeeutton; virtual; abstract;

  procedure CreateEdit; virtual; abstract;

  procedure CreateLabel; virtual; abstract;

  property Form: TForead GetForm;

  end;

 

type

  TRedFormBuilder = class(TAbstractFormBuilder)

  private

  FNextLeft, FNextTop: Integer;

  public

  procedure CreateForm(AOwner: TComponent); overr;

  procedure CreateSpeedButton; override;

  procedure CreateEdit; override;

  procedure CreateEdit; override;

  end;

 

type

  TBlueFormBuilder = class(TAbstractFormBuilder)

  private

  FNextLeft, FNextTop: Integer;

  public

  procedure CreateForm(AOwner: TComponent); override;

  procedure CreateSpeedButton; override;

  procedure CreateEdit; override;

  procedure CreateLabel; override;

  end;

有上面的介面中:

·  宣告瞭一個建立抽象產品物件的介面:TAbstractFormBuilder

¨  類TAbstractFormBuilder有三個抽象的工廠方法CreateForm、CreateSpeedButton、CreateEdit、CreateEdit

·  TBlueFormBuilder、TRedFormBuilder用來實現建立具體產品物件的方法

 

 

執行的時候,客戶一個具體類的公共構造器來建立它某一些部分,具體的構造器例項的呼叫方法如下:

 

 

procedure TForm1.Create3ComponentFormUsingBuilder(ABuilder: TAbstractFormBuilder);

var

  NewForm: TForm;

begin

  with ABuilder do begin

  CreateForm(Application);

  CreateEdit;

  CreateSpeedButton;

  CreateLabel;

  NewForm := Form;

  if NewForm <> nil then NewForm.Show;

  end;

end;


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991420/,如需轉載,請註明出處,否則將追究法律責任。

相關文章