刚刚开始学习模式编程,以前一直做Delphi开发的,而且C#也才刚学,不是太熟,所以就用Delphi做了个简单工厂模式的模板,发在这里,便于以后查看。
1
unit FactoryByParameter; 2

3
interface 4

5
uses 6
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7
Dialogs; 8

9
type 10
TProductID = (A,B,C); 11

12
TProduct = class(TObject) 13
public 14
procedure Operation; virtual;abstract; 15
end; 16

17
TConcreteProduceA = class(TProduct) 18
public 19
procedure Operation;override; 20
end; 21

22
TConcreteProduceB = class(TProduct) 23
public 24
procedure Operation;override; 25
end; 26

27
TConcreteProduceC = class(TProduct) 28
public 29
procedure Operation;override; 30
end; 31

32
TFactory = class(TObject) 33
public 34
function CreateProduct(ProductID:TProductID):TProduct;virtual; 35
end; 36

37
TFactoryExchanged = class(TFactory) 38
public 39
function CreateProduct(ProductID:TProductID):TProduct;override; 40
end; 41

42
implementation 43

44
{ TConcreteProduceA } 45

46
procedure TConcreteProduceA.Operation; 47
begin 48
inherited; 49
ShowMessage('This is create product A'); 50
end; 51

52
{ TConcreteProduceB } 53

54
procedure TConcreteProduceB.Operation; 55
begin 56
inherited; 57
ShowMessage('This is create product B'); 58
end; 59

60
{ TConcreteProduceC } 61

62
procedure TConcreteProduceC.Operation; 63
begin 64
inherited; 65
ShowMessage('This is create product C'); 66
end; 67

68
{ TFactory } 69

70
function TFactory.CreateProduct(ProductID: TProductID): TProduct; 71
var 72
Product:TProduct; 73
begin 74
case ProductID of 75
A:Product := TConcreteProduceA.Create; 76
B:Product := TConcreteProduceb.Create; 77
C:Product := TConcreteProduceC.Create; 78
end; 79
Result := Product; 80
end; 81

82
{ TFactoryExchanged } 83

84
function TFactoryExchanged.CreateProduct(ProductID: TProductID): TProduct; 85
var 86
Product:TProduct; 87
begin 88
case ProductID of 89
A:Product := TConcreteProduceB.Create; 90
B:Product := TConcreteProduceC.Create; 91
C:Product := TConcreteProduceA.Create; 92
end; 93
Result := Product; 94

95
end; 96

97
end.98

99
100

101
Client Form 代码102

103
unit ClientForm; 104

105
interface 106

107
uses 108
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 109
Dialogs, FactoryByParameter, StdCtrls, ExtCtrls; 110

111
type 112
TForm1 = class(TForm) 113
rgIndex: TRadioGroup; 114
cbChange: TCheckBox; 115
Button1: TButton; 116
procedure Button1Click(Sender: TObject); 117
private 118
{ Private declarations } 119
public 120
{ Public declarations } 121
end; 122

123
var 124
Form1: TForm1; 125

126
implementation 127

128
{$R *.dfm} 129

130
procedure TForm1.Button1Click(Sender: TObject); 131
var 132
ID : TProductID; 133
Product : TProduct; 134
Factory : TFactory; 135
begin 136
try 137
if cbChange.Checked then 138
Factory := TFactoryExchanged.Create 139
else 140
Factory := TFactory.Create; 141

142
Product := Factory.CreateProduct(TProductID(rgIndex.ItemIndex)); 143
Product.Operation; 144
finally 145
Factory.Free; 146
Product.Free; 147
end; 148
end; 149

150
end.151

152
本文分享了作者从Delphi转向C#过程中,使用Delphi实现简单工厂模式的代码示例。通过创建不同产品类和工厂类,展示了如何根据参数创建不同类型的产品实例。
588

被折叠的 条评论
为什么被折叠?



