关于设计模式,网上有大量类似的文章。不过大多数都是Java、Python之类的语言,我参考了Java的设计模式源码,
给出了对应Delphi的设计模式Demo,仅供参考。(设计模式本身是与编程语言无关)以下是Demo源码。
参考资料来自于书籍:大话设计模式
{
这是一个工厂模式的简单应用,实现2个数之间的加减乘除运算
当需要增加一个新的运算类型时,只需要增加一个新的运算类,并且在
工厂类的创造实例方法CreateOpera 增加这个新的运算类
}
{
这是一个工厂模式的简单应用,实现2个数之间的加减乘除运算
当需要增加一个新的运算类型时,只需要增加一个新的运算类,并且在
工厂类的创造实例方法CreateOpera 增加这个新的运算类
}
unit uCalculationFactory;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Dialogs;
type
Toperation = class
public
NumA : Real;
NumB : Real;
function GetResult : Real;virtual;
end;
TCalculationFactory = class
public
class function CreateOpera(AOper : Integer) : Toperation;
end;
TAddition = class(Toperation)
function GetResult : Real;override;
end;
TSubtraction = class(Toperation)
function GetResult : Real;override;
end;
TMultiplication = class(Toperation)
function GetResult : Real;override;
end;
TDivision = class(Toperation)
function GetResult : Real;override;
end;
implementation
{ TCalculationFactory }
class function TCalculationFactory.CreateOpera(AOper : Integer): Toperation;
begin
case AOper of
0 : Result := TAddition.Create();
1 : Result := TSubtraction.Create();
2 : Result := TMultiplication.Create();
3 : Result := TDivision.Create();
end;
end;
{ TAddition }
function TAddition.GetResult: Real;
begin
Result := NumA + NumB;
end;
{ TSubtraction }
function TSubtraction.GetResult: Real;
begin
Result := NumA - NumB;
end;
{ TMultiplication }
function TMultiplication.GetResult: Real;
begin
Result := NumA * NumB;
end;
{ TDivision }
function TDivision.GetResult: Real;
begin
if NumB = 0 then
begin
ShowMessage('0不能做除数');
end else begin
Result := NumA / NumB;
end;
end;
{ Toperation }
function Toperation.GetResult: Real;
begin
//
end;
end.
//以下是界面上调用的代码
procedure TForm1.Button1Click(Sender: TObject);
var
calc : Toperation;
begin
calc := TCalculationFactory.CreateOpera(ComboBox.itemIndex);
calc.NumA := RzNumericEditA.Value;
calc.NumB := RzNumericEditB.Value;
RzNumericEditResult.Value := calc.GetResult;
end;