刚刚开始学习模式编程,以前一直做Delphi开发的,而且C#也才刚学,不是太熟,所以就用Delphi做了个简单工厂模式的模板,发在这里,便于以后查看。
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
unit FactoryByParameter;
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
interface
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
uses
6
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
7
Dialogs;
8![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
type
10
TProductID = (A,B,C);
11![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
TProduct = class(TObject)
13
public
14
procedure Operation; virtual;abstract;
15
end;
16![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
TConcreteProduceA = class(TProduct)
18
public
19
procedure Operation;override;
20
end;
21![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
22
TConcreteProduceB = class(TProduct)
23
public
24
procedure Operation;override;
25
end;
26![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
27
TConcreteProduceC = class(TProduct)
28
public
29
procedure Operation;override;
30
end;
31![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
32
TFactory = class(TObject)
33
public
34
function CreateProduct(ProductID:TProductID):TProduct;virtual;
35
end;
36![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
37
TFactoryExchanged = class(TFactory)
38
public
39
function CreateProduct(ProductID:TProductID):TProduct;override;
40
end;
41![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
42
implementation
43![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
44
{ TConcreteProduceA }
45![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
46
procedure TConcreteProduceA.Operation;
47
begin
48
inherited;
49
ShowMessage('This is create product A');
50
end;
51![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
52
{ TConcreteProduceB }
53![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
54
procedure TConcreteProduceB.Operation;
55
begin
56
inherited;
57
ShowMessage('This is create product B');
58
end;
59![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
60
{ TConcreteProduceC }
61![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
62
procedure TConcreteProduceC.Operation;
63
begin
64
inherited;
65
ShowMessage('This is create product C');
66
end;
67![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
68
{ TFactory }
69![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
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![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
82
{ TFactoryExchanged }
83![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
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![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
95
end;
96![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
97
end.
98![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
99
100![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
101
Client Form 代码
102![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
103
unit ClientForm;
104![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
105
interface
106![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
107
uses
108
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
109
Dialogs, FactoryByParameter, StdCtrls, ExtCtrls;
110![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
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![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
123
var
124
Form1: TForm1;
125![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
126
implementation
127![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
128
{$R *.dfm}
129![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
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![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
142
Product := Factory.CreateProduct(TProductID(rgIndex.ItemIndex));
143
Product.Operation;
144
finally
145
Factory.Free;
146
Product.Free;
147
end;
148
end;
149![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
150
end.
151![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
152![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![image](https://www.cnblogs.com/images/cnblogs_com/Mymaming/WindowsLiveWriter/fa3004903825_1359A/image_thumb.png)