设计模式浅谈2——工厂模式之简单工厂模式

工厂模式负责将大量有共同接口的类实例化。工厂模式可以动态决定哪一个类实例化,不必事先知道每次要实例化哪个类。工厂模式有如下几种形态:
1.简单工厂模式(Simple Factory):又称静态工厂方法模式
2.工厂方法模式(Factory Method):又称多态性工厂模式。
3.抽象工厂模式(Abstract Factory):又称工具箱模式。

[size=large][b]一、简单工厂模式[/b][/size]
[img]http://dl.iteye.com/upload/attachment/302007/bbc4686e-1d13-36df-aee7-57667cf44890.bmp[/img]
简单工厂模式是工厂方法模式的一个特殊实现。
[b]简单工厂模式的实例:[/b]
一个农场公司,专门向市场销售各类水果。水果种类如下:
1.苹果
2.草莓
3.葡萄
水果与植物有很大的不同,水果最终可以采摘食用。那么一个自然的做法是建立一个各种水果都适用的接口,以便与农场里的其他植物区分开,如下图所示:
[img]http://dl.iteye.com/upload/attachment/302010/e12fd34a-c0dc-3c6f-874e-6e404a065f93.bmp[/img]
水果类有各种方法。继承水果类的子类如Strawberry,它的源代码如下:
[img]http://dl.iteye.com/upload/attachment/302018/b5920d4c-c0f8-3f6a-8898-1917549608c2.bmp[/img]
其他的水果实例代码类似。
农场的园丁也是系统一部分,自然需要个合适的类来代表,这个类为FruitGardener,其结构图如下:
[img]http://dl.iteye.com/upload/attachment/302012/6c23a930-3dcd-35eb-a2de-54e7a089cfad.bmp[/img]
FruitGardener类根据客户端要求创建不同类型的水果,如Apple,Strawberry的实例等。如果遇到不合法的输入,则抛出BadFruitException。园丁类的代码如下:
[img]http://dl.iteye.com/upload/attachment/302014/b86d436d-21eb-3ee2-bec7-c787265505bd.bmp[/img]
可以看出,园丁类提供了一个静态工厂方法,在客户端的调用下,这个方法创建客户端所需要的水果对象。
[b]简单工厂模式的结构[/b]
简单工厂模式是类的创建模式,这个模式一般性结构如下:
[img]http://dl.iteye.com/upload/attachment/302016/991cc415-e5f4-3eeb-b440-38bf3992b70a.bmp[/img]
从图上可以看出,简单工厂模式设计到工厂角色,抽象产品角色以及具体产品角色等三个角色:
1.工厂类角色(Creator):这是工厂方法模式的核心,含有与应用密切相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象,它往往由一个具体java类实现。
2.抽象产品角色(Product):这是工厂方法模式所创建对象的父类,或它们共同拥有的接口。抽象产品角色可以是一个java接口或者java抽象类实现。
3.具体产品角色(ConcreteProduct):工厂方法模式所创建的任何对象都是这个角色的实例,具体产品角色由一个具体java类实现。

工厂类Creator示意性代码如下:
[img]http://dl.iteye.com/upload/attachment/302028/444228fe-1908-38be-80c6-a12859a324c9.bmp[/img]
抽象角色Product的示意性代码如下:
[img]http://dl.iteye.com/upload/attachment/302030/c8c7903b-8df6-381e-b3e4-d81ccd438ad3.bmp[/img]
具体产品角色ConcreteProduct示意性代码如下:
[img]http://dl.iteye.com/upload/attachment/302032/dd77e6ce-b851-3fc2-b9f5-6452ac4b145c.bmp[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值