打印本文 打印本文 关闭窗口 关闭窗口
用 Delphi 学设计模式(二) 之 工厂方法篇 (原创)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2897  更新时间:2009/4/23 18:27:20  文章录入:mintao  责任编辑:mintao
>:string;
begin
  result:=''''刚上市的沙瓤大西瓜,2元钱一斤!'''';
end;

function 类_西瓜.被评价():string;
begin
  result:=''''靠,被骗了,根本没熟!'''';
end;
//=============================================================================

2、在工厂类和水果类单元文件中,修改小贩的工厂方法(这里是修改,已经违反了“开闭原则”

//=============================================================================
class function 工厂类_小贩.工厂(水果名:string): 接口_水果;
begin
  if(水果名=''''苹果'''')then result:=类_苹果.Create()
  else if(水果名=''''葡萄'''')then result:=类_葡萄.Create()
  else if(水果名=''''草莓'''')then result:=类_草莓.Create()
  //请注意,下面这条语句是新加上去的,工厂被修改了!!!!
  else if(水果名=''''西瓜'''')then result:=类_西瓜.Create();
end;
//=============================================================================

3、在窗体单元文件中,添加一个新的事件处理过程(这里是扩展,不会影响到已有的代码

//=============================================================================
RadioButton4: TRadioButton;
procedure RadioButton4Click(Sender: TObject);

procedure TForm1.RadioButton4Click(Sender: TObject);
begin
   交易(''''西瓜'''');
end;
//=============================================================================



下面再看看在工厂方法模式中是怎么做的:


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

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

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

function 类_西瓜.提示():string;
begin
  result:=''''刚上市的沙瓤大西瓜,2元钱一斤!'''';
end;

function 类_西瓜.被评价():string;
begin
  result:=''''靠,被骗了,根本没熟!'''';
end;
//=============================================================================


2、区别就在这里了,在工厂类和水果类单元文件中,引入一个新的西瓜小贩类(这里是扩展,不会影响到已有的代码)
//=============================================================================
类_西瓜小贩 = class(TInterfacedObject, 接口_小贩)
  function 工厂(): 接口_水果;
end;

{***** 类_西瓜小贩 *****}

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


3、在窗体单元文件中,添加一个新的事件处理过程(这里是扩展,不会影响到已有的代码

//=============================================================================
RadioButton4: TRadioButton;
procedure RadioButton4Click(Sender: TObject);

procedure TForm1.RadioButton4Click(Sender: TObject);
begin
  交易(类_西瓜小贩.Create);
end;
//=============================================================================
 

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

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