學習設計模式要對面向對象的程序設計有一定的理解
//水果類
TFruit = Class(TObject)
end;
//蘋果類
TApple = class(TFruit)
end;
function Factory(): TFruit;
var
f:TFruit;
begin
//精髓就是這條語句了
//卻將他賦值給TFruit類型的變量
//其實這樣做好處大大的
f:=TApple
result:=f;
end
在例程中我用到了接口
這是說明
//我們用一個小果園來說明什麼是簡單工廠
//這個果園裡有葡萄
//所有的水果都有生長
//果園的任務就是讓我們得到葡萄
//我們利用得到的對象可以完成水果生長
//果園就是我們所說的簡單工廠(Factory)
//而葡萄
//完成產品的過程稱之為外部使用者(Produce)
//使用簡單工廠的好處是
//
//不管你種什麼
//而是返回一個他們的抽象對象
//
//內部產品發生變化時外部使用者不會受到影響
//他的缺點是
//如果增加了新的產品
這是定義簡單工廠的單元文件源代碼
//SimpleFactory
//代碼如下==========
unit SimpleFactory;
interface
uses
SysUtils;
type
//水果類
//僅僅聲明了所有對象共有的接口
IFruit = interface(IInterface)
function Grow: string; //生長
function Harvest: string; //收獲
function Plant: string;//耕作
end;
//葡萄類
TGrape = class(TInterfacedObject
function Grow: string;
function Harvest: string;
function Plant: string;
end;
//蘋果類
TApple = class(TInterfacedObject
function Grow: string;
function Harvest: string;
function Plant: string;
end;
//草莓類
TStrawberry = class(TInterfacedObject
function Grow: string;
function Harvest: string;
function Plant: string;
end;
//果園類
TFruitGardener = class(TObject)
public
//
//
//
class function Factory(whichFruit:string): IFruit;
end;
//聲明一個異常
NoThisFruitException = class(Exception)
end;
implementation
{ ********** TGrape ********** }
function TGrape
begin
result:=
end;
function TGrape
begin
result:=
end;
function TGrape
begin
result:=
end;
{ ********** TApple ********** }
function TApple
begin
result:=
end;
function TApple
begin
result:=
end;
function TApple
begin
result:=
end;
{ ********** TStrawberry ********** }
function TStrawberry
begin
result:=
end;
function TStrawberry
begin
result:=
end;
function TStrawberry
begin
result:=
end;
{ ********** TFruitGardener ********** }
class function TFruitGardener
begin
//精髓就是這條語句了 result:= TApple
//不明白趕緊去復習復習什麼是多態性
if(LowerCase(whichFruit)=
else if(LowerCase(whichFruit)=
else if(LowerCase(whichFruit)=
else Raise NoThisFruitException
end;
end
窗體界面
//MainForm
unit MainForm;
interface
uses
Windows
Dialogs
type
TForm
RadioButton
RadioButton
RadioButton
RadioButton
procedure RadioButton
procedure RadioButton
procedure RadioButton
procedure RadioButton
public
procedure Produce(fruitName:string);
end;
var
Form
implementation
{ ********** TForm
//這就是生產過程
//IFruit 類型的臨時變量 f 自己知道種的是哪種水果
//想要什麼盡管來種
procedure TForm
var
f: IFruit;
begin
try
f:=TFruitGardener
ShowMessage(f
ShowMessage(f
ShowMessage(f
except
on e:NoThisFruitException do Messagedlg(e
end;
end;
{$R *
procedure TForm
begin
Produce(
end;
procedure TForm
begin
Produce(
end;
procedure TForm
begin
Produce(
end;
procedure TForm
begin
Produce(
end;
end
工廠模式的目的就是
如果把具體產品類(TApple
From:http://tw.wingwit.com/Article/program/Delphi/201311/24659.html