計算器的功能實現
實現工廠設計模式
通過物件導向的思想,進行設計,所用的程式設計思想為物件的三大特性:封裝,繼承,多型
通過實現乙個簡單的 計算器的功能(輸入兩個數,進行加,減,乘,除)
思想思路:
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實現
工廠模式中又分為簡單工廠模式 工廠方法模式和抽象工廠模式 這裡給大家介紹的簡單工廠模式是其中最簡單的一種。學習設計模式要對物件導向的程式設計有一定的理解,特別是多型性 如果能看懂下面的例子就沒問題了,呵呵 在例程中我用到了介面 不明白得可以把它當成乙個比抽象類還抽象的抽象類,說白了把它當成乙個類就沒...
反射實現簡單工廠模式
傳統的簡單工廠模式缺點是 缺點 由於工廠類集中了所有例項的建立邏輯,這就直接導致一旦這個工廠出了問題,所有的客戶端都會受到牽連 這樣一來,但產品的種類增加的時候,即有不同的產品介面或者抽象類的時候,工廠類就需要判斷何時建立何種種類的產品,這就和建立何種種類產品的產品相互混淆在了一起,違背了單一職責,...