简单工厂模式模板

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

 

 

ContractedBlock.gif ExpandedBlockStart.gif Code
  1unit FactoryByParameter; 
  2
  3interface 
  4
  5uses 
  6    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  7  Dialogs; 
  8
  9type 
 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
 42implementation 
 43
 44{ TConcreteProduceA } 
 45
 46procedure TConcreteProduceA.Operation; 
 47begin 
 48  inherited; 
 49  ShowMessage('This is create product A'); 
 50end
 51
 52{ TConcreteProduceB } 
 53
 54procedure TConcreteProduceB.Operation; 
 55begin 
 56  inherited; 
 57  ShowMessage('This is create product B'); 
 58end
 59
 60{ TConcreteProduceC } 
 61
 62procedure TConcreteProduceC.Operation; 
 63begin 
 64  inherited; 
 65  ShowMessage('This is create product C'); 
 66end
 67
 68{ TFactory } 
 69
 70function TFactory.CreateProduct(ProductID: TProductID): TProduct; 
 71var 
 72  Product:TProduct; 
 73begin 
 74  case ProductID of 
 75    A:Product := TConcreteProduceA.Create; 
 76    B:Product := TConcreteProduceb.Create; 
 77    C:Product := TConcreteProduceC.Create; 
 78  end
 79  Result := Product; 
 80end
 81
 82{ TFactoryExchanged } 
 83
 84function TFactoryExchanged.CreateProduct(ProductID: TProductID): TProduct; 
 85var 
 86  Product:TProduct; 
 87begin 
 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
 95end
 96
 97end.
 98
 99 
100
101Client Form 代码
102
103unit ClientForm; 
104
105interface 
106
107uses 
108  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
109  Dialogs, FactoryByParameter, StdCtrls, ExtCtrls; 
110
111type 
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
123var 
124  Form1: TForm1; 
125
126implementation 
127
128{$R *.dfm} 
129
130procedure TForm1.Button1Click(Sender: TObject); 
131var 
132  ID : TProductID; 
133  Product : TProduct; 
134  Factory : TFactory; 
135begin 
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
148end
149
150end.
151
152

 

image

转载于:https://www.cnblogs.com/caiziming/archive/2008/08/12/1266372.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值