工廠模式,有工廠就有產品,工廠里就是加工產品的,這個模式有以下參與者:
1.抽象產品,對象產品的對像接口或抽象層。
2.具體產口,實現抽象產品的接口。
3.抽象工廠,工廠的方法,方法用于反回產品對象。可以用抽象類或接口定義
4.具體工廠,實現抽象工廠接口的具體類

unit Unit4;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls;
type
TProcedure = class(TObject)//產品抽象類
public
procedure ShowCarName; virtual; abstract;
end;
TProcedureNissan = class(TProcedure) //產品具體類
public
procedure ShowCarName; override;
end;
TProcedureToyota = class(TProcedure) //產品具體類
public
procedure ShowCarName; override;
end;
TFactoryInterface = class(TObject) //工廠抽象類
public
function CreateProcedure: TProcedure; virtual; abstract;//返回產品
end;
TFactoryNissan = class(TFactoryInterface) //工廠具體類
public
function CreateProcedure: TProcedure; override;
end;
TFactoryToyota = class(TFactoryInterface) //工廠具體類
public
function CreateProcedure: TProcedure; override;
end;
TForm4 = class(TForm)
btn1: TButton;
btn2: TButton;
procedure FormCreate(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
procedure TForm4.btn1Click(Sender: TObject);
var
_CarFactory: TFactoryInterface;
_CarClass: TProcedure;
begin
_CarFactory := TFactoryNissan.Create;
_CarClass := _CarFactory.CreateProcedure;
_CarClass.ShowCarName;
_CarClass.Free;
_CarFactory.Free;
end;
procedure TForm4.btn2Click(Sender: TObject);
var
_CarFactory: TFactoryInterface;
_CarClass: TProcedure;
begin
_CarFactory := TFactoryToyota.Create;
_CarClass := _CarFactory.CreateProcedure;
_CarClass.ShowCarName;
_CarClass.Free;
_CarFactory.Free;
end;
procedure TForm4.FormCreate(Sender: TObject);
begin
end;
{ TProcedureToyota }
procedure TProcedureToyota.ShowCarName;
begin
ShowMessage('這個是豐田汽車 TOYOTA');
end;
{ TProcedureNissan }
procedure TProcedureNissan.ShowCarName;
begin
ShowMessage('這個是日產汽車 NISSAN');
end;
{ TFactoryNissan }
function TFactoryNissan.CreateProcedure: TProcedure;
begin
Result := TProcedure(TProcedureNissan.Create);
end;
{ TFactoryToyota }
function TFactoryToyota.CreateProcedure: TProcedure;
begin
Result := TProcedure(TProcedureToyota.Create);
end;
end.
總結,工廠模式一般用途返回一個對象,將產品和工廠進行分離后,各自進行抽象和多態。這個原型結構看似簡單但在實際使用過程中卻可以靈活運用。通過類中的工廠方法創建產品,可以系統在不修改具體的工廠角色的情況下引進新產品(擴展)。工
廠模式相當于給工廠派生一個掛鉤以便提供對象的一個擴充版本。
浙公網安備 33010602011771號