《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:延迟初始化对象
2010-08-27 17:41
639 查看
示例:延迟初始化对象
说明:
在Creator的构造器中不要调用工厂方法—在ConcreteCreator中该工厂方法还不可用。构造器只是将产品初始化为0,而不是创建一个具体产品。访问者返回该产品。但首先它要检查确定该产品的存在,如果产品不存在,访问者就创建它。这种技术有时被称为lazy initialization。
代码:
unit FactoryMethodUnit2;
interface
uses
Dialogs;
type
TProduct = class
public
procedure Show; virtual; abstract;
end;
TContreteProduct = class(TProduct)
public
procedure Show; override;
end;
TCreator = class
private
FProduct: TProduct;
protected
function CreateProduct(): TProduct; virtual;
public
constructor Create;
destructor Destroy; override;
//---
function GetProduct: TProduct;
end;
TContreteCreator = class(TCreator)
protected
function CreateProduct(): TProduct; override;
end;
implementation
procedure TContreteProduct.Show;
begin
showmessage('这是ContreteProduct');
end;
constructor TCreator.Create;
begin
FProduct := nil;
end;
destructor TCreator.Destroy;
begin
if assigned(FProduct) then
FProduct.Free;
//---
inherited;
end;
function TCreator.CreateProduct: TProduct;
begin
Result := nil;
end;
function TCreator.GetProduct: TProduct;
begin
if FProduct = nil then
FProduct := self.CreateProduct;
//---
result := FProduct;
end;
function TContreteCreator.CreateProduct: TProduct;
begin
Result := TContreteProduct.Create;
end;
end.
procedure TForm1.Button1Click(Sender: TObject);
var
Creator: TCreator;
begin
Creator := TContreteCreator.Create;
try
Creator.GetProduct.Show;
Creator.GetProduct.Show;
finally
Creator.Free;
end;
end;
说明:
在Creator的构造器中不要调用工厂方法—在ConcreteCreator中该工厂方法还不可用。构造器只是将产品初始化为0,而不是创建一个具体产品。访问者返回该产品。但首先它要检查确定该产品的存在,如果产品不存在,访问者就创建它。这种技术有时被称为lazy initialization。
代码:
unit FactoryMethodUnit2;
interface
uses
Dialogs;
type
TProduct = class
public
procedure Show; virtual; abstract;
end;
TContreteProduct = class(TProduct)
public
procedure Show; override;
end;
TCreator = class
private
FProduct: TProduct;
protected
function CreateProduct(): TProduct; virtual;
public
constructor Create;
destructor Destroy; override;
//---
function GetProduct: TProduct;
end;
TContreteCreator = class(TCreator)
protected
function CreateProduct(): TProduct; override;
end;
implementation
procedure TContreteProduct.Show;
begin
showmessage('这是ContreteProduct');
end;
constructor TCreator.Create;
begin
FProduct := nil;
end;
destructor TCreator.Destroy;
begin
if assigned(FProduct) then
FProduct.Free;
//---
inherited;
end;
function TCreator.CreateProduct: TProduct;
begin
Result := nil;
end;
function TCreator.GetProduct: TProduct;
begin
if FProduct = nil then
FProduct := self.CreateProduct;
//---
result := FProduct;
end;
function TContreteCreator.CreateProduct: TProduct;
begin
Result := TContreteProduct.Create;
end;
end.
procedure TForm1.Button1Click(Sender: TObject);
var
Creator: TCreator;
begin
Creator := TContreteCreator.Create;
try
Creator.GetProduct.Show;
Creator.GetProduct.Show;
finally
Creator.Free;
end;
end;
相关文章推荐
- 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:基于工厂方法的迷宫
- 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:平行的类层级架构
- 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:参数化工厂方法
- 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:基于工厂方法的迷宫
- 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:基于工厂方法的迷宫
- 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:工厂方法接口
- 《GOF设计模式》—工厂方法(Factory Method)—Delphi源码示例:为子类提供挂钩(hook)
- 《GOF设计模式》—原型(Prototype)—Delphi源码示例:初始化克隆对象
- 《GOF设计模式》—模板方法(TEMPLATE METHOD)—Delphi源码示例:文档
- 《GOF设计模式》—抽象工厂(Abstract Factory)—Delphi源码示例:基于抽象工厂的迷宫
- 《GOF设计模式》—桥接(BRIDGE)—Delphi源码示例:创建正确的Implementor对象(参数)
- 《GOF设计模式》—迭代器 (ITERATOR)—Delphi源码示例:用于复合对象的外部迭代器
- 《GOF设计模式》—模板方法(TEMPLATE METHOD)—Delphi源码示例:绘图
- 《GOF设计模式》—装饰(DECORATOR)—Delphi源码示例:改变对象内核
- 《GOF设计模式》—单件(Singleton)—Delphi源码示例:创建Singleton类的子类(重载Instance方法)
- 《GOF设计模式》—迭代器 (ITERATOR)—Delphi源码示例:用于复合对象的内部迭代器
- 创建对象_工厂方法(Factory Method)模式 与 静态工厂方法
- 《GOF设计模式》—桥接(BRIDGE)—Delphi源码示例:创建正确的Implementor对象(缺省的实现)
- 《GOF设计模式》—桥接(BRIDGE)—Delphi源码示例:创建正确的Implementor对象(参数)
- 《GOF设计模式》—桥接(BRIDGE)—Delphi源码示例:创建正确的Implementor对象(缺省的实现)