工厂模式讨论
在《java与模式》书中提到工厂模式又分简单工厂模式,工厂方法模式,抽象工厂模式,欢迎各位讨论这三种模式的区别与用法。 问题点数:100、回复次数:13Top
1 楼doway(john)回复于 2006-03-06 10:25:42 得分 20
Calendar.getInstance() 这是工厂方法,与其他两种模式不是一种类型。
简单工厂和抽象工厂是一种类型,都用于创建其他组件。简单工厂只有一种实现,而抽象工厂可能有多个工厂的不同实现。
比如:针对一种数据库时,用简单工厂就可以了,支持多种数据库是,就应该使用抽象工厂了。
Top
2 楼yyfhz(火山)回复于 2006-03-06 11:59:27 得分 20
个人理解:
如果有个汽车工厂Factory,输入参数"小汽车",就生产小汽车;输入"卡车"就生产卡车,这叫工厂。
如果有个工厂,但是你不知道它是生产汽车的还是生产电视机的,需要你根据实际情况进行进一步的具体说明,也就是说你只知道有个工厂,但不知道它到底是干什么的,这叫抽象工厂。
想像一下造一辆汽车,我们需要获得所有的基本构件(如车厢,轮子,窗户...),这叫工厂;然后将它们按照图纸的说明组装起来,这叫方法;组合起来就是工厂方法。例如用同样的构件,换一份图纸,出来的可能就是拖拉机;而用同样的图纸不同的构件造出来的东西可能也是不同的(记得007里面有个家伙用黄金造了辆汽车,真BT^_^)
Top
3 楼shazi_pig(傻子)回复于 2006-03-06 12:51:25 得分 15
让创建实例所需要的大量初始化工作从的构造函数中分离出去这就是工厂模式。
工厂模式的目的就是,把创建对象的责任和使用对象的责任分开,工厂负责统一创建具体产品(苹果、葡萄和草莓),然后再把这些产品转化为他们的抽象产品(水果)返回给外部使用者,作为使用者关心的仅仅是抽象产品预留的接口,而不关心他们是怎么创建的。这样,即使因为某些原因导致创建产品的过程发生变化,也不会影响到外部使用者,在一定程度上保证了程序的可维护性。
Top
4 楼Times2001(回车)回复于 2006-03-08 16:24:59 得分 0
个人觉得用工厂方法模式,可以代替简单工厂模式和抽象工厂模式,特别是抽象工厂模式,没什么存在的必要。
大家发表一下各自的看法吧Top
5 楼Times2001(回车)回复于 2006-03-10 09:52:20 得分 0
upTop
6 楼chg2008(岂能尽如人意,但求无愧我心!)回复于 2006-03-10 09:54:31 得分 10
路过。学习Top
7 楼Times2001(回车)回复于 2006-03-14 09:54:32 得分 0
following is my explain:
simple factory pattern: I would like to call it "static factory pattern".this pattern is a variation of Factory pattern, its speciality is that it is a factory in which known products can be created, and its structure is simple.example:
public class FactorySimple{
public static Product createProductA(){//create A}
public static Product createProductB(){//create B}
public static Product createProductC(){//create C}
}
in FactorySimple, factory can create A, B or C, but can't create others. this pattern make the factory is close, ensure nothing else to be create. it is necessary in some situation.
Top
8 楼Times2001(回车)回复于 2006-03-14 10:13:16 得分 0
factory method pattern: this is a good pattern, it use a method to create "product". the number of "products" created by this method, can be limited, and can be infinite. in this method, you can used Class.forName(), for example:
public class FactoryMethodClass{
//other method can be here
//defalt
public static Product createProduct(){//create default product}
//Factory method that can create a lot of product
public static Product createProduct(String classname){
try{
Product productObject=(Product)forName(classname).newInstance();
}catch(Exception e){
System.out.println(e.toString());
}
return productObject;
}
}Top
9 楼Times2001(回车)回复于 2006-03-14 10:15:06 得分 0
abstract factory pattern:Top
10 楼cleansunshing(努力学习中)回复于 2006-03-14 17:47:25 得分 10
学习Top
11 楼WiseDragon(慧龙)回复于 2006-03-14 18:18:06 得分 15
个人理解:
工厂方法模式:只会生产单一产品;(好比一个专心做一行的企业)
如一个轮胎厂他会生产轿车轮胎,客车轮胎,货车轮胎等,一系列各种型号的轮胎
抽象工厂模式:会生产同一产品族的产品(好比一个有实力的工厂)
如一个轿车工厂 他会生产 轿车轮胎, 轿车发动机,等 轿车的一系列产品
个人愚见,请多指正Top
12 楼cqm2099(~人生小弟~)回复于 2006-03-14 19:01:33 得分 10
upTop
13 楼Times2001(回车)回复于 2006-03-15 09:32:50 得分 0
这些工厂模式无非是希望在client端用的时候,方便编码和维护,
但感觉抽象工厂并不好用,因为工厂也是多层多个的,好像我要找个厂子做个大号的鞋,首先我要找到nike的总部,nike总部说这事交给亚太地区做就好了,我就要去亚太地区的nike取得联系,最后亚太的老总也把我交给了什么马来西亚的什么地方,最后我才拿到我想要的鞋.这过程好像很麻烦,有没有人能举个例子,说明一下抽象工厂应用时的技巧.Top




