Delphi Design Pattern - Factory Method

1.意图

定义一个用于创建对象的接口,让子类决定实例化哪个类,Factory Method 使一个类的实例化延迟到其子类

2.例子

 

假设现在有一个对话框让你打开一个文件,可以是Word文档也可以是Excel文档,函数如下

function OpenDocument: TDocument;

由于应用程序依赖于抽象的Document类,所以我们不得不写这样的代码

 

if  bIsWordDocument then
begin
  Result :
=  TWordDocument.Create;
  
// 对WordDocument进行一些处理
  ...
end
else   if  bIsExcelDocument then
begin
  Result :
=  TExcelDocument.Create
  
// 对ExcelDocument进行一些处理
end
...

 

通过工厂方法,我们定义了创建Document类的接口,所以就把类的创建的代码转移到了另一个类中

 

Result : =  TWordDocumentFactory.GetInstance();

 

而抽象类 TDocumentFactory 只需要定义一个GetInstance()接口,他的子类负责具体实例化具体的对象。

 

参数化工厂:参数化工厂用的比较多一点

举例

 

TProductFactory  =   class (TObject)
public
  
class  function GetInstance(ProductType: Integer): TAbstractProduct;
end;

class  function GetInstance(ProductType: Integer): TAbstractProduct;
begin
  
if  ProductType  =   1  then
   Result :
=  TProductA.Create
  
else
    Result :
=  TProductB.Create;
end;

 

这样,实际创建对象的类由TProductFactory来负责,并且转移到了实现的代码中,在接口定义部分(Delphi 的 interface 部分) 就不需要知道具体对象的类了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值