转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
用 Delphi 学设计模式(一) 之 简单工厂篇 (原创)         ★★★★

用 Delphi 学设计模式(一) 之 简单工厂篇 (原创)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1853 更新时间:2009/4/23 18:27:20

        本文在大富翁发表已将近一个月,作为理论性比较强的内容,反映比较热烈并被转载和收藏,由于我的 Blog 已开通,现将全文在 Blog 中重新发布并删除大富翁上的原贴 ,转载请注明出处。下面是正文:

        大约半年前看了阎宏老师的《Java与模式》,里面的工厂模式篇基本上还看懂了点,当时用 Delphi 改写了其中几个例程,现在拿出来与大家分享,里面的注释是我对这种设计模式的理解,很片面的,如果有什么错误希望大家批评指正。

        工厂模式中又分为简单工厂模式工厂方法模式抽象工厂模式 。这里给大家介绍的简单工厂模式是其中最简单的一种。如果大家支持的话我会继续贴出工厂方法模式和抽象工厂模式等后续篇,要看大家的反应程度哦!

        学习设计模式要对面向对象的程序设计有一定的理解,特别是多态性 ,如果能看懂下面的例子就没问题了,呵呵!

//水果类,它是一个抽象产品
TFruit = Class(TObject)
...
end;

//苹果类,水果类的具体化
TApple = class(TFruit)
...
end;

function Factory(): TFruit;
var 
    f:TFruit;
begin
  //精髓就是这条语句了,明明创建了TApple对象,
  //却将他赋值给TFruit类型的变量
  //其实这样做好处大大的,后面就体会到了
  f:=TApple.Create();
  result:=f;
end
 

        在例程中我用到了接口 ,不明白得可以把它当成一个比抽象类还抽象的抽象类,说白了把它当成一个类就没错。 下面开始吧。。。。。。。

这是说明:
//我们用一个小果园来说明什么是简单工厂

//这个果园里有葡萄、苹果和草莓三种水果

//所有的水果都有生长、耕作和收获三个步骤

//果园的任务就是让我们得到葡萄、苹果和草莓这三种水果对象

//我们利用得到的对象可以完成水果生长、耕作和收获三个步骤

//果园就是我们所说的简单工厂(Factory)

//而葡萄、苹果和草莓这三种水果就是工厂里的产品 (Pruduct)

//完成产品的过程称之为外部使用者(Produce)

//使用简单工厂的好处是:

//1、充分利用了多态性
//不管你种什么,果园返回的对象并不是具体的葡萄、苹果或者草莓
//而是返回一个他们的抽象对象 -- 水果(IFruit)

//2、充分利用了封装性
//内部产品发生变化时外部使用者不会受到影响

//他的缺点是:
//如果增加了新的产品,就必须得修改工厂(Factory)

这是定义简单工厂的单元文件源代码:
//SimpleFactory.pas 定义简单工厂的单元文件

//代码如下==========

unit SimpleFactory;

interface

uses
  SysUtils;

type

  //水果类,它是一个抽象产品
  //仅仅声明了所有对象共有的接口,并不实现他们
  IFruit = interface(IInterface)
    function Grow: string; //生长
    function Harvest: string; //收获
    function Plant: string;//耕作
  end;

  //葡萄类,水果类的具体化
  TGrape = class(TInterfacedObject, IFruit)
    function Grow: string;
    function Harvest: string;
    function Plant: string;
  end;

  //苹果类,水果类的具体化
  TApple = class(TInterfacedObject, IFruit)
    function Grow: string;
    function Harvest: string;
    function Plant: string;
  end;

  //草莓类,水果类的具体化
  TStrawberry = class(TInterfacedObject, IFruit)
    function Grow: string;
    function Harvest: string;
    function Plant: string;
  end;
  
  //果园类,它就是工厂类,负责给出三种水果的实例
  TFruitGardener = class(TObject)
  public
    //1、注意 class 关键字,它定义工厂方法 Factory 是一个静态函数,可以直接使用
    //2、注意返回值,他返回的是最抽象的产品 IFruit 水果类
    //3、注意他有一个参数,来告诉工厂创建哪一种水果
    class function Factory(whichFruit:string): IFruit;
  end;
  
  //声明一个异常,这不是重点
  NoThisFruitException = class(Exception)
  end;
  

implementation

{ ********** TGrape ********** }

function TGrape.Grow: string;
begin
  result:=''''葡萄正在生长......'''';
end;

function TGrape.Harvest: string;
begin
  result:=''''葡萄可以收获了......'''';
end;

function TGrape.Plant: string;
begin
  result:=''''葡萄已经种好了......'''';
end;

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


[Web开发]authentication mode=Windows/之“/”应用程序中的…  [电脑技术]使用?和*两个通配符迅速批量(搜索)查找文件
[聊天工具]快速又高效 用Email免费发送网络传真__天极Yesky  [系统软件]InstallShield Express for delphi制作安装程序定…
[常用软件]InstallShield Express制作Delphi数据库安装程序  [常用软件]网管工具 用OH协助服务器进行安全监控
[常用软件]留住精彩 用“数码故事”制作DVD光碟  [常用软件]小块头有大智慧 用Nero轻松设计个性化光盘
[常用软件]技高一筹 用Winamp播放影碟  [VB.NET程序]用 VB 实现表单的自动提交
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台