抽象工厂(Abstract Factory)模式也叫工具箱,它提供一个用于构建一群相关或相互依赖的对象,而无需指定他们的具体类。
unit NewPas;
interface
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs;
type
TCPU
=
class
(TObject)
end
;
TAMD3400
=
class
(TCPU)
end
;
TIntelCPU
=
class
(TCPU)
end
;
TAMDDoubleCore
=
class
(TCPU)
end
;
TIntelDoubleCore
=
class
(TCPU)
end
;
THardDisk
=
class
(TObject)
end
;
TSATAHardDisk
=
class
(THardDisk)
end
;
TIDEHardDisk
=
class
(THardDisk)
end
;
TNotebookIDEHardDisk
=
class
(THardDisk)
end
;
TNotebookSATAHardDisk
=
class
(THardDisk)
end
;
IComputerFactory
=
interface
(IInterface)
[
'
{0FBF5ADD-F28E-45E5-AC22-D76FE9A2FFB3}']
function
CreateCPU: TCPU;
function
CreateHardDisk: THardDisk;
end
;
TDellNotebookComputerFactory
=
class
(TInterfacedObject, IComputerFactory)
public
function
CreateCPU: TCPU;
function
CreateHardDisk: THardDisk;
end
;
TLegendPCComputerFactory
=
class
(TInterfacedObject, IComputerFactory)
public
function
CreateCPU: TCPU;
function
CreateHardDisk: THardDisk;
end
;
TComputer
=
class
(TInterfacedObject)
private
FCPU: TCPU;
FHardDisk: THardDisk;
public
constructor Create(ComputerFactory: IComputerFactory);
property
CPU: TCPU read FCPU
write
FCPU;
property
HardDisk: THardDisk read FHardDisk
write
FHardDisk;
end
;
implementation
{ TComputer }
constructor TComputer.Create(ComputerFactory: IComputerFactory);
begin
FCPU :
=
ComputerFactory.CreateCPU;
FHardDisk :
=
ComputerFactory.CreateHardDisk;
end
;
{ TDellNotebookComputerFactory }
function
TDellNotebookComputerFactory.CreateCPU: TCPU;
begin
Result :
=
TIntelDoubleCore.Create;
end
;
function
TDellNotebookComputerFactory.CreateHardDisk: THardDisk;
begin
Result :
=
TNotebookSATAHardDisk.Create;
end
;
{ TLegendPCComputerFactory }
function
TLegendPCComputerFactory.CreateCPU: TCPU;
begin
Result :
=
TAMD3400.Create;
end
;
function
TLegendPCComputerFactory.CreateHardDisk: THardDisk;
begin
Result :
=
TIDEHardDisk.Create;
end
;
end
.
我们不需要为了Dell GX 620 声明一个非常具体的类
TDellGx620
=
class
(TComputer)
CPU: TIntel(R)
2
.0G;
Memory: TDDR512;
...
end
;
而是说由抽象工厂TDellGx620Factory来构建TComputer具体的部件,这样可以很好的避免类爆炸的问题。