抽象工厂(Abstract Factory)模式也叫工具箱,它提供一个用于构建一群相关或相互依赖的对象,而无需指定他们的具体类。
unit NewPas;
interface
end;
end;
end;
end;
end;
end;
end;
end;
end;
end;
['{0FBF5ADD-F28E-45E5-AC22-D76FE9A2FFB3}']
function CreateCPU: TCPU;
function CreateHardDisk: THardDisk;
end;
public
function CreateCPU: TCPU;
function CreateHardDisk: THardDisk;
end;
public
function CreateCPU: TCPU;
function CreateHardDisk: THardDisk;
end;
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;
FHardDisk := ComputerFactory.CreateHardDisk;
end;
begin
Result := TIntelDoubleCore.Create;
end; function TDellNotebookComputerFactory.CreateHardDisk: THardDisk;
begin
Result := TNotebookSATAHardDisk.Create;
end;
begin
Result := TAMD3400.Create;
end; function TLegendPCComputerFactory.CreateHardDisk: THardDisk;
begin
Result := TIDEHardDisk.Create;
end; end.
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs;
type
TCPU
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 :
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具体的部件,这样可以很好的避免类爆炸的问题。