用Delphi语言来学设计模式之简单工厂篇

2016-01-29 14:24 58 1 收藏

用Delphi语言来学设计模式之简单工厂篇,用Delphi语言来学设计模式之简单工厂篇

【 tulaoshi.com - Delphi 】

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

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

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/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)

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/delphi/)这是定义简单工厂的单元文件源代码:


//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;

{ ********** TApple ********** }

function TApple.Grow: string;
begin
 result:=‘苹果正在生长......‘;
end;

function TApple.Harvest: string;
begin
 result:=‘苹果可以收获了......‘;
end;
<

来源:https://www.tulaoshi.com/n/20160129/1493205.html

延伸阅读
标签: Delphi
  提到 RPG (角色扮演游戏,Role Play Game),在座各位恐怕没有不熟悉的。从古老经典的 DOS 版《仙剑奇侠传》到新潮花哨的《轩辕剑》系列,无不以曲折优美的故事情节,美丽可人的主角,悦耳动情的背景音乐,震撼了每一个玩家的心灵。而说到 RPG,就不能不提 DirectX,因为 PC 上大部分的 RPG 都是用这个冬冬开发的。早在《轩辕剑叁外...
格式工厂皮肤跟语言怎么设置   1:在工具栏里面看到,这里的皮肤。当前是黑色的,晚上的时候,黑色就不会觉得比较刺眼。 2:这是选择语言的,这里我点击的英文,所以就可以到格式工厂界面是用英文的。 3:这是选择更多的语言的。什么语言都有,就是看你个人的需要的。 4:选择你要的语言。点击OK按钮就行了。...
标签: Web开发
Lightbox 这个词还真不好翻译,勉强硬解为"灯笼"。 Lightbox的效果类似于WinXP操作系统的注销/关机对话框,除去屏幕中心位置的对话框,其他的区域都以淡出的效果逐渐变为银灰色以增加对比度,此时除了对话框内的表单控件,没有其他区域可以获取焦点。 Lightbox的作用则相当于从前只在IE中被支持的"Modal Dialog";现在在FireFox也可用windo...
单例模式用于限制进程中只有一个某个类的对象,本例的Singleton是一个线程实例,在每一个时钟到达时检测是否到达某个时刻(本例的时刻存于Ini文件中),如果到达则产生一个线程,但是如果在这个线程完成其任务前又到达一个时钟,则有可能会产生多个线程执行任务,以致出现混乱,所以考虑使用Singleton模式解决这个问题(当然还有其他解决方案,...
格式工厂如何修改皮肤和语言   格式工厂是一款众所周知的视频格式转换器,可以帮助我们转换视频的格式,不管是专业的视频剪辑师还是业余的摄影家都热衷于使用这款软件,最主要的原因还是其简单易上手,而且专业功能强大。在格式工厂中更是提供了一些个性化的设置,皮肤和语言都可以通过个人的喜好来改变。下面小编就来教大家格式工厂...

经验教程

663

收藏

31
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部