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

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

本文简介:选择自 wlnh_2004 的 blog

?         “开闭原则”:一个模块应该易于扩展,免于修改

        问题:请考虑上一章的例子中,如果添加一个新的具体水果类“西瓜”需要做哪些工作。

        本章完成以下内容: 
        1、代码用支持中文的 delphi 2005 编译并通过,并去除了其中一些无关紧要的地方,如异常处理等 ;
        2、重新设计一个情景,分别用“简单工厂模式”和“工厂方法模式”两种方法实现,请体会其中的差别 ;
        3、在情景中添加一个子类后,请体会“简单工厂模式”和“工厂方法模式”两种方法不同的处理方式; 
        4、如果不理解什么是接口、多态、静态函数等概念,这里不作解释,请看第一章或找相关资料; 
        5、本章的情景和上一章差不多,只是把工厂从“果园”变成了“水果小贩”;同样的三种水果:苹果、葡萄、草莓;每种水果都封装了两个逻辑,在和外部“交易”时会用到这两个逻辑。 最后,请重新回顾“开闭原则”

        下面开始吧。。。。。。。

        这里是简单工厂模式的实现方法,在这种模式中:
        1、一个小贩要负责所有三种水果的交易,这对他来说是很大的挑战噢,不信您看!
        2、顾客必须对水果的名字有一个准确地描述,这样水果才会卖给你,这很影响生意呀! 

//简单工厂类和水果类单元文件

unit simplefactory;

interface

type
  接口_水果 = interface(iinterface)
    function 提示():string;
    function 被评价():string;
  end;

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

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

  类_草莓 = class(tinterfacedobject, 接口_水果)
    function 提示():string;
    function 被评价():string;
  end;
  
  工厂类_小贩 = class(tobject)
  public
    class function 工厂(水果名:string): 接口_水果;
  end;

implementation

{***** 类_苹果 *****}

function 类_苹果.提示():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 类_草莓.被评价():string;
begin
  result:='试试?哇,牙快酸掉了!';
end;

{***** 工厂类_小贩 *****}

class function 工厂类_小贩.工厂(水果名:string): 接口_水果;
begin
  if(水果名='苹果')then result:=类_苹果.create()
  else if(水果名='葡萄')then result:=类_葡萄.create()
  else if(水果名='草莓')then result:=类_草莓.create();
end;
end.

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

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

go top