首页 新闻 赞助 找找看

抽象工厂模式和工厂方法模式的区别是什么

0
悬赏园豆:50 [已关闭问题] 关闭于 2014-12-19 16:38

“工厂方法依靠继承解决问题,抽象工厂依靠对象的组合解决问题”,如何理解这下半句话,谢谢,最好能举个例子。另外还有个问题,为什么抽象工厂叫”抽象工厂“,而工厂方法就叫”工厂方法“,工厂方法模式里的工厂不是也是抽象的吗,还有工厂方法模式中的“方法”两个字又代表什么

问题补充:

看到一句话,好像可以解释名字的问题:The main difference between a "factory method" and an "abstract factory" is that the factory method is a single method, and an abstract factory is an object,来自于:http://stackoverflow.com/questions/5739611/differences-between-abstract-factory-pattern-and-factory-method

会长的主页 会长 | 专家六级 | 园豆:12401
提问于:2014-12-10 16:05
< >
分享
所有回答(8)
0
爱编程的大叔 | 园豆:30839 (高人七级) | 2014-12-10 16:18

可不可以这么理解:工厂方法要解决的问题是:“把实例化过程延迟到子类”,实例化过程是在继承至抽象工厂类的派生类中完成的,所以说“工厂方法依靠继承来解决问题“;而抽象工厂模式要解决的问题是:实例化并组织一系列相关的对象家族,这些对象通过组合的方式存在于抽象工厂类的派生类中,虽然实例化过程也是在派生类中完成,但是抽象工厂的侧重点不是关注如何实例化对象,而是关注如何组织一系列对象。所以说:“工厂方法依靠继承解决问题,抽象工厂依靠对象的组合解决问题”。

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2014-12-10 16:41

@会长: 我怎么觉得你已经自己回答了呀。我觉得看它们的类图就差不多是这个意思了吧,我之前也看过它们的书籍,理解得比较浅显,因为我不敲代码,O(∩_∩)O哈哈~

支持(0) 反对(0) 邦邦酱好 | 园豆:202 (菜鸟二级) | 2014-12-10 17:04

@会长: 我是这么想的,工厂方法只有一个产品类,一家公司只有一种产品的话,肯定是注重于如何优化产品,差不多意思是这个模式注重的是方法。而抽象工厂有多个产品类,一家公司有多种产品的话,注重于如何组合产品卖出最好的价格拉,哈哈,不过貌似跟抽象工厂这个不搭调。

我乱说的....

支持(0) 反对(0) 邦邦酱好 | 园豆:202 (菜鸟二级) | 2014-12-10 17:10

@邦邦酱好: 我差不多现在也是这样理解,就是他们两个的侧重点不同

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2014-12-10 17:11
0

太高级了,不懂

福气满满好运连连 | 园豆:60 (初学一级) | 2014-12-10 16:49

结贴的时候赏你一分

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2014-12-10 16:53

@会长: 谢谢哈,太感谢了!

支持(0) 反对(0) 福气满满好运连连 | 园豆:60 (初学一级) | 2014-12-11 14:41
0

您是在绕口令吗?哈哈  不懂啊

MarryQ | 园豆:69 (初学一级) | 2014-12-10 16:51

我想了很久也没想通,冒着被鄙视的危险来问问了

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2014-12-10 16:53
0

默默的在等最佳答案

纵一苇之所如- | 园豆:187 (初学一级) | 2014-12-10 16:53
0

我理解中的工厂模式就是  就是 一个公用方法封装成工厂类,然后实例化调用(一种方法干一件事)

抽象工厂模式 就是在上面的基础上 抽象多个实例工厂类(多种方法干同一件事)

风醉 | 园豆:1197 (小虾三级) | 2014-12-10 17:15
0

如果想彻底了解该问题,你可以看一下设计模式的书籍。别人告诉你的,只能知道一知半解。还是看书实惠!

Mr.Brian | 园豆:1518 (小虾三级) | 2014-12-10 17:22
0

得先解释一下抽象这个词的含义。

抽象 abstract, C#中定义abstract class,一般有个abstract方法,子类继承时需要实现abstract方法。

回到Factory,以数据访问为例,Factory的作用是用来创建Repository实例,对表进行增删改查。

那当abstract遇到factory,会因为什么样的需求?

多数据库!

比方说,原来是用SqlServer数据库的,现在要用Oracle了。

那就需要再继承AbstractFactory来实现一个OracleFactory。

抽象工厂的本义是指,把工厂抽象出来。

 

不过现在数据访问都是基于IoC的了,包括业务逻辑层也是这样。

南昌炒粉 | 园豆:760 (小虾三级) | 2014-12-10 20:48

《设计模式》中关于工厂方法的使用场景概况为三种:

1,一个类不知道它所创建的对象的类时

2,一个类希望由它的子类指定创建对象时

3,当类将创建对象的职责委托给多个帮助子类的时候....

将不同的数据库看做是产品,然后对应编写相应的工厂,这种情况属于上述三种情况哪一种:

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2014-12-12 12:20
0

http://blog.csdn.net/wyxhd2008/article/details/5597975这个讲的比较好懂

茂茂 | 园豆:2892 (老鸟四级) | 2014-12-11 15:50

其实我想知道的是什么说工厂方法依靠继承解决问题,而抽象工厂依靠组合(或聚合)解决问题。

支持(0) 反对(0) 会长 | 园豆:12401 (专家六级) | 2014-12-12 11:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册