现在的位置: 首页 > 综合 > 正文

Delphi Design Pattern – Abstract Factory

2018年04月07日 ⁄ 综合 ⁄ 共 1952字 ⁄ 字号 评论关闭

Abstract Factory 提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类.

 

生成代码如下

unit unit1;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs;

type
  TAbstractProductA = class(TObject)
  end;

  TAbstractProductB = class(TObject)
  end;

  TProductB2 = class(TAbstractProductB)
  end;

  TProductB1 = class(TAbstractProductB)
  end;

  TProductA2 = class(TAbstractProductA)
  end;

  TProductA1 = class(TAbstractProductA)
  end;

  TAbstractFactory = class(TObject)
  
public
    function CreateProductA: TAbstractProductA; 
virtualabstract;
    function CreateProductB: TAbstractProductB; 
virtualabstract;
  end;

  TConcreteFactoryFactory = class(TObject)
  
public
    
class function GetInstance(ProductType: integer): TAbstractFactory;
  end;

  TConcreteFactory2 = class(TAbstractFactory)
  
public
    function CreateProductA: TAbstractProductA; 
override;
    function CreateProductB: TAbstractProductB; 
override;
  end;

  TConcreteFactory1 = class(TAbstractFactory)
  
public
    function CreateProductA: TAbstractProductA; 
override;
    function CreateProductB: TAbstractProductB; 
override;
  end;

implementation

{
*************************** TConcreteFactoryFactory ****************************
}
class function TConcreteFactoryFactory.GetInstance(ProductType: integer):
    TAbstractFactory;
begin
  
if ProductType = 1 then
    Result :
= TConcreteFactory1.Create
  
else
    Result :
= TConcreteFactory2.Create;
end;

{
****************************** TConcreteFactory2 *******************************
}
function TConcreteFactory2.CreateProductA: TAbstractProductA;
begin
  Result :
= TProductA2.Create;
end;

function TConcreteFactory2.CreateProductB: TAbstractProductB;
begin
  Result := TProductB2.Create;
end;

{
****************************** TConcreteFactory1 *******************************
}
function TConcreteFactory1.CreateProductA: TAbstractProductA;
begin
  Result :
= TProductA1.Create;
end;

function TConcreteFactory1.CreateProductB: TAbstractProductB;
begin
  Result := TProductB1.Create;
end;

end.

抱歉!评论已关闭.