delphi 實現簡單工廠模式

2021-06-05 03:50:38 字數 3639 閱讀 4892

計算器的功能實現

實現工廠設計模式

通過物件導向的思想,進行設計,所用的程式設計思想為物件的三大特性:封裝,繼承,多型

通過實現乙個簡單的 計算器的功能(輸入兩個數,進行加,減,乘,除)

思想思路:

1.設計虛擬父類;

2.子類繼承父類

3. 通過虛擬方法,進行進行過載

4.工廠類,例項化物件,採用多型

}unit uoperation;

inte***ce

uses classes, inifiles;

type

toperation = class(tobject)

private

fnumbera: double;

fnumberb: double;

public

function getresult: double; virtual; abstract;

property numbera: double read fnumbera write fnumbera;

property numberb: double read fnumberb write fnumberb;

constructor create;

destructor destroy; override;

end;

tadd = class(toperation)

public

function getresult: double; override;

end;

tsub = class(toperation)

public

function getresult: double; override;

end;

tmultiple = class(toperation)

public

function getresult: double; override;

end;

tdev = class(toperation)

public

function getresult: double; override;

end;

toperationfactory = class

private

fopmap: tstringhash;

public

function getoperation(op: string): toperation;

constructor create;

destructor destroy; override;

end;

implementation

constructor toperation.create;

begin

end;

destructor toperation.destroy;

begin

inherited;

end;

function tadd.getresult: double;

begin

result := fnumbera + fnumberb;

end;

function tsub.getresult: double;

begin

result := fnumbera - fnumberb;

end;

function tmultiple.getresult: double;

begin

result := fnumbera * fnumberb;

end;

function tdev.getresult: double;

begin

result := 0;

if fnumberb <> 0 then

result := fnumbera / fnumberb;

end;

constructor toperationfactory.create;

begin

fopmap := tstringhash.create;

fopmap.add('+', 1);

fopmap.add('-', 2);

fopmap.add('*', 3);

fopmap.add('/', 4);

end;

destructor toperationfactory.destroy;

begin

fopmap.free;

inherited;

end;

function toperationfactory.getoperation(op: string): toperation;

begin

result := nil;

case fopmap.valueof(op) of

1: result := tadd.create;

2: result := tsub.create;

3: result := tmultiple.create;

4: result := tdev.create;

end;

end;

end.

unit unit1;

inte***ce

uses

windows, messages, sysutils, variants, classes, graphics, controls, forms,

dialogs, stdctrls;

type

tform1 = class(tform)

button1: tbutton;

edit1: tedit;

edit2: tedit;

edit3: tedit;

label1: tlabel;

label2: tlabel;

label3: tlabel;

label4: tlabel;

edit4: tedit;

procedure button1click(sender: tobject);

private

public

end;

varform1: tform1;

implementation

uses uoperation;

procedure tform1.button1click(sender: tobject);

varop: toperation;

opfact: toperationfactory;

begin

opfact := toperationfactory.create;

op := opfact.getoperation(edit4.text);

tryif op = nil then exit;

op.numbera := strtointdef(edit1.text, -1);

op.numberb := strtointdef(edit2.text, -1);

edit3.text := floattostr(op.getresult);

finally

opfact.free;

op.free;

end;

end;

end.

簡單工廠之Delphi實現

工廠模式中又分為簡單工廠模式 工廠方法模式和抽象工廠模式 這裡給大家介紹的簡單工廠模式是其中最簡單的一種。學習設計模式要對物件導向的程式設計有一定的理解,特別是多型性 如果能看懂下面的例子就沒問題了,呵呵 在例程中我用到了介面 不明白得可以把它當成乙個比抽象類還抽象的抽象類,說白了把它當成乙個類就沒...

簡單工廠之Delphi實現

工廠模式中又分為簡單工廠模式 工廠方法模式和抽象工廠模式 這裡給大家介紹的簡單工廠模式是其中最簡單的一種。學習設計模式要對物件導向的程式設計有一定的理解,特別是多型性 如果能看懂下面的例子就沒問題了,呵呵 在例程中我用到了介面 不明白得可以把它當成乙個比抽象類還抽象的抽象類,說白了把它當成乙個類就沒...

反射實現簡單工廠模式

傳統的簡單工廠模式缺點是 缺點 由於工廠類集中了所有例項的建立邏輯,這就直接導致一旦這個工廠出了問題,所有的客戶端都會受到牽連 這樣一來,但產品的種類增加的時候,即有不同的產品介面或者抽象類的時候,工廠類就需要判斷何時建立何種種類的產品,這就和建立何種種類產品的產品相互混淆在了一起,違背了單一職責,...