打印本文 打印本文 关闭窗口 关闭窗口
用 Delphi 学设计模式(二) 之 工厂方法篇 (原创)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2899  更新时间:2009/4/23 18:27:20  文章录入:mintao  责任编辑:mintao
被评价():string;
begin
  result:=''''恩,还不错,挺甜!'''';
end;

{****** 类_葡萄 ******}

function 类_葡萄.提示():string;
begin
  result:=''''别把核咽下去了!'''';
end;

function 类_葡萄.被评价():string;
begin
  result:=''''没有核呀???'''';
end;

{****** 类_草莓 ******}

function 类_草莓.提示():string;
begin
  result:=''''别怪我没告诉你,很酸!'''';
end;

function 类_草莓.被评价():string;
begin
  result:=''''试试?哇,牙快酸掉了!'''';
end;

{***** 类_苹果小贩 *****}

function 类_苹果小贩.工厂(): 接口_水果;
begin
  result:=类_苹果.Create()
end;

{***** 类_葡萄小贩 *****}

function 类_葡萄小贩.工厂(): 接口_水果;
begin
  result:=类_葡萄.Create()
end;

{***** 类_草莓小贩 *****}

function 类_草莓小贩.工厂(): 接口_水果;
begin
  result:=类_草莓.Create()
end;
end.


//窗体单元文件

unit MainForm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,FactoryMethod;

type
  TForm1 = class(TForm)
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    RadioButton3: TRadioButton;
    procedure RadioButton3Click(Sender: TObject);
    procedure RadioButton2Click(Sender: TObject);
    procedure RadioButton1Click(Sender: TObject);
  private
    procedure 交易(小贩:接口_小贩);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure TForm1.交易(小贩:接口_小贩);
var
  我买的水果:接口_水果;
begin
    我买的水果:=小贩.工厂();
    ShowMessage(我买的水果.提示);
    ShowMessage(我买的水果.被评价);
end;

procedure TForm1.RadioButton1Click(Sender: TObject);
begin
  交易(类_苹果小贩.Create);
end;

procedure TForm1.RadioButton2Click(Sender: TObject);
begin
  交易(类_葡萄小贩.Create);
end;

procedure TForm1.RadioButton3Click(Sender: TObject);
begin
  交易(类_草莓小贩.Create);
end;
end.
  


        夏天来了,西瓜上市了;
        在简单工厂模式中,由于只有一个小贩,为了引进西瓜他只好对自己的工厂进行了修改;
        在工厂方法模式中,由于每个小贩负责一种水果,只需要再引进一个卖西瓜的小贩就行了,对其他小贩的销售不会造成影响 。

下面先看看在简单工厂模式中是怎么做的:

1、在工厂类和水果类单元文件中,引入一个新的西瓜类(这里是扩展,不会影响到已有的代码

//=============================================================================
类_西瓜 = class(TInterfacedObject, 接口_水果)
  function 提示():string;
  function 被评价():string;
end;

{****** 类_西瓜 ******}

function 类_西瓜.提示()

上一页  [1] [2] [3] [4]  下一页

打印本文 打印本文 关闭窗口 关闭窗口