用Delphi实现四人帮(Gof)设计模式-8构建者模式 Builder - cococlout的专栏 - CSDN博客
来源:百度文库 编辑:神马文学网 时间:2024/04/28 01:20:36
用Delphi实现四人帮(Gof)设计模式-8构建者模式 Builder收藏
Builder是为创建一个Product对象的各个部件指定的抽象接口.ConcreteBuilder是具体的建造者,实现Builder接口,构造和装配各个部件.Product就是产品.指挥者是构建一个使用Builder接口的对象.类图如下.
构建者模式主要是用于创建一些复杂的对象,这些对象内部构建间建造顺序通常是稳定的,但对象内部的构建通常面临复杂的变化.建造者模式的好处是使得建造代码与表示代码相分离,由于建造者隐藏了该产品是如何组装的,因此若需要改变一个产品的内部表示,只需要定义一个具体的建造者就可以了.
所以建造者模式是当创建复杂对象的算法独立于该对象的组成部分以及它们的装配方法时,适用的模式.
实现构建者
- {**************************************************
- 实现Builder Pattern
- UnitOwner:coco.zhang
- Last Modified:2008-10-4
- **************************************************}
- unit BuilderUnit;
- interface
- type
- MaxPartsNum = 1..100;
- TParts = array [MaxPartsNum]of string;
- { 声明产品类}
- TProduct = class(TObject)
- private
- MIndex : integer;
- MParts : TParts;
- public
- constructor Create;
- procedure AddPart( Part : string );
- procedure List;
- end;
- {声明抽象建造者}
- TBuilder = class(TObject)
- public
- procedure BuildPartA;virtual;abstract;
- procedure BuildPartB;virtual;abstract;
- function GetResult():TProduct;virtual;abstract;
- end;
- {声明建造者}
- TConcreteBuilderA = class(TBuilder)
- private
- MProduct : TProduct;
- public
- constructor Create;
- procedure BuildPartA;override;
- procedure BuildPartB;override;
- function GetResult():TProduct;override;
- end;
- {声明建造者}
- TConcreteBuilderB = class(TBuilder)
- private
- MProduct : TProduct;
- public
- constructor Create;
- procedure BuildPartA;override;
- procedure BuildPartB;override;
- function GetResult():TProduct;override;
- end;
- implementation
- { 产品}
- constructor TProduct.Create;
- begin
- MIndex := 1;
- end;
- procedure TProduct.AddPart( Part : string );
- begin
- MParts[MIndex] := Part;
- MIndex := MIndex + 1;
- end;
- procedure TProduct.List;
- var I : Integer;
- begin
- for I := 1 to MIndex-1 do
- begin
- Writeln(MParts[I]);
- end;
- end;
- {实现构建者A}
- constructor TConcreteBuilderA.Create;
- begin
- MProduct := TProduct.Create;
- end;
- procedure TConcreteBuilderA.BuildPartA;
- begin
- MProduct.AddPart('添加部件A');
- end;
- procedure TConcreteBuilderA.BuildPartB;
- begin
- MProduct.AddPart('添加部件B');
- end;
- function TConcreteBuilderA.GetResult():TProduct;
- begin
- Result := MProduct;
- end;
- {实现构建者B}
- constructor TConcreteBuilderB.Create;
- begin
- MProduct := TProduct.Create;
- end;
- procedure TConcreteBuilderB.BuildPartA;
- begin
- MProduct.AddPart('添加部件X');
- end;
- procedure TConcreteBuilderB.BuildPartB;
- begin
- MProduct.AddPart('添加部件Y');
- end;
- function TConcreteBuilderB.GetResult():TProduct;
- begin
- Result := MProduct;
- end;
- end.
实现客户端
- program Builder;
- {$APPTYPE CONSOLE}
- uses
- BuilderUnit;
- var
- AVar : TBuilder;
- begin
- AVar := TConcreteBuilderA.Create;
- AVar.BuildPartA;
- AVar.BuildPartB;
- AVar.GetResult.List;
- AVar := TConcreteBuilderB.Create;
- AVar.BuildPartA;
- AVar.BuildPartB;
- AVar.GetResult.List;
- end.
结果
D:\Projects\Delphi7\src\GofProjects\Builder> Builder
添加部件A
添加部件B
添加部件X
添加部件Y
用Delphi实现四人帮(Gof)设计模式-8构建者模式 Builder - cococlout的专栏 - CSDN博客
用Delphi实现四人帮(Gof)设计模式-3装饰模式 Decorator MOdel - cococlout的专栏 - CSDN博客
用Delphi实现四人帮(Gof)设计模式-9观察者模式Publish/Subscribe,Observer - cococlout的专栏 - CSDN博客
用Delphi实现四人帮(Gof)设计模式-6 模板方法 Template Method - cococlout的专栏 - CSDN博客
GoF设计模式小结- -
GOF设计模式
GOF设计模式
GoF设计模式小结- -
学习GoF设计模式的重要性 设计模式学习 研究
observer设计模式的java实现 - 小小冰的专栏
软件设计模式(耦合) - LZD_jay的专栏 - CSDN博客
GoF设计模式之三 Factory Method- -
GoF设计模式之六 Adaptor- -
GoF设计模式之七 Bridge- -
GoF设计模式之八 Composite- -
GoF设计模式之十 Facade- -
GoF设计模式之十一 Flyweight- -
GoF设计模式之十四 Command- -
GoF设计模式之十五 Interpreter- -
GoF设计模式之十六 Iterator- -
GoF设计模式之十七 Mediator- -
GoF设计模式之十八 Memento- -
GoF设计模式之十九 Observer- -
GoF设计模式之二十三 Visitor- -