用 Delphi 学设计模式(二) 之 工厂方法篇 (原创)[5]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 wlnh_2004 的 blog


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

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

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

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

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

function 类_西瓜.提示():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;
//=============================================================================

本文关键:用 Delphi 学设计模式(二) 之 工厂方法篇 (原创)
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top