工厂模式(FactoryMethod)

  1. unit uFactoryMethod;

  2. interface

  3. uses Classes,Windows,Messages,Dialogs;

  4. type
  5.     TMobile = class
  6.      public
  7.        procedure Call();virtual;abstract;
  8.     end;
  9.     TNokia = class(TMobile)
  10.      public
  11.        constructor Create();
  12.        procedure Call();override;
  13.   end;
  14.   TMotorola = class(TMobile)
  15.      public
  16.        constructor Create;
  17.        procedure Call();override;
  18.   end;
  19.   TMobileFactory = class
  20.      public
  21.        function produceMobile():TMobile;virtual; abstract;
  22.   end;
  23.   TMotorolaFactory = class(TMobileFactory)
  24.      public
  25.        function produceMobile():TMobile;override;
  26.   end;
  27.   TNokiaFactory = class(TMobileFactory)
  28.   private
  29.      public
  30.        function produceMobile():TMobile;override;
  31.   end;




  32. implementation



  33. { TNokia }

  34. procedure TNokia.Call;
  35. begin
  36.   inherited;
  37.   ShowMessage('a call of Nokia');
  38. end;

  39. constructor TNokia.Create;
  40. begin

  41. end;

  42. { TMotorola }

  43. procedure TMotorola.Call;
  44. begin
  45.   inherited;
  46.   ShowMessage('a call of motorola');
  47. end;

  48. constructor TMotorola.Create;
  49. begin

  50. end;

  51. { TMotorolaFactory }

  52. function TMotorolaFactory.produceMobile: TMobile;
  53. var
  54.   Motorola:TMotorola;
  55. begin
  56.   Motorola:=TMotorola.Create;
  57.   Result:=Motorola;

  58. end;

  59. { TNokiaFactory }
  60. function TNokiaFactory.produceMobile: TMobile;
  61. var
  62.   Nokia:TNokia;
  63. begin
  64.   Nokia:=TNokia.Create;
  65.   Result:=Nokia;
  66. end;

  67. end.
  68. //=============================================================================
  69. //测试工厂模式
  70. //============================================================================
  1. unit Unit1;
  2. interface
  3. uses
  4.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  5.   Dialogs, StdCtrls;
  6. type
  7.   TForm1 = class(TForm)
  8.     Button1: TButton;
  9.     Button2: TButton;
  10.     procedure Button1Click(Sender: TObject);
  11.     procedure Button2Click(Sender: TObject);
  12.   private
  13.     { Private declarations }
  14.   public
  15.     { Public declarations }
  16.   end;
  17. var
  18.   Form1: TForm1;
  19. implementation
  20. uses uFactoryMethod;
  21. {$R *.dfm}
  22. procedure TForm1.Button1Click(Sender: TObject);
  23. var
  24.   mbf:TMobileFactory;
  25.   mb:TMobile;
  26. begin
  27.   mbf:=TMotorolaFactory.Create;
  28.   mb:=mbf.produceMobile;
  29.   mb.Call;
  30. end;
  31. procedure TForm1.Button2Click(Sender: TObject);
  32. var
  33.   mbf:TMobileFactory;
  34.   mb:TMobile;
  35. begin
  36.   mbf:=TNokiaFactory.Create;
  37.   mb:=mbf.produceMobile;
  38.   mb.Call;
  39. end;
  40. end.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值