“工厂方法依靠继承解决问题,抽象工厂依靠对象的组合解决问题”,如何理解这下半句话,谢谢,最好能举个例子。另外还有个问题,为什么抽象工厂叫”抽象工厂“,而工厂方法就叫”工厂方法“,工厂方法模式里的工厂不是也是抽象的吗,还有工厂方法模式中的“方法”两个字又代表什么
看到一句话,好像可以解释名字的问题: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
可不可以这么理解:工厂方法要解决的问题是:“把实例化过程延迟到子类”,实例化过程是在继承至抽象工厂类的派生类中完成的,所以说“工厂方法依靠继承来解决问题“;而抽象工厂模式要解决的问题是:实例化并组织一系列相关的对象家族,这些对象通过组合的方式存在于抽象工厂类的派生类中,虽然实例化过程也是在派生类中完成,但是抽象工厂的侧重点不是关注如何实例化对象,而是关注如何组织一系列对象。所以说:“工厂方法依靠继承解决问题,抽象工厂依靠对象的组合解决问题”。
@会长: 我怎么觉得你已经自己回答了呀。我觉得看它们的类图就差不多是这个意思了吧,我之前也看过它们的书籍,理解得比较浅显,因为我不敲代码,O(∩_∩)O哈哈~
@会长: 我是这么想的,工厂方法只有一个产品类,一家公司只有一种产品的话,肯定是注重于如何优化产品,差不多意思是这个模式注重的是方法。而抽象工厂有多个产品类,一家公司有多种产品的话,注重于如何组合产品卖出最好的价格拉,哈哈,不过貌似跟抽象工厂这个不搭调。
我乱说的....
@邦邦酱好: 我差不多现在也是这样理解,就是他们两个的侧重点不同
太高级了,不懂
结贴的时候赏你一分
@会长: 谢谢哈,太感谢了!
您是在绕口令吗?哈哈 不懂啊
我想了很久也没想通,冒着被鄙视的危险来问问了
默默的在等最佳答案
我理解中的工厂模式就是 就是 一个公用方法封装成工厂类,然后实例化调用(一种方法干一件事)
抽象工厂模式 就是在上面的基础上 抽象多个实例工厂类(多种方法干同一件事)
如果想彻底了解该问题,你可以看一下设计模式的书籍。别人告诉你的,只能知道一知半解。还是看书实惠!
得先解释一下抽象这个词的含义。
抽象 abstract, C#中定义abstract class,一般有个abstract方法,子类继承时需要实现abstract方法。
回到Factory,以数据访问为例,Factory的作用是用来创建Repository实例,对表进行增删改查。
那当abstract遇到factory,会因为什么样的需求?
多数据库!
比方说,原来是用SqlServer数据库的,现在要用Oracle了。
那就需要再继承AbstractFactory来实现一个OracleFactory。
抽象工厂的本义是指,把工厂抽象出来。
不过现在数据访问都是基于IoC的了,包括业务逻辑层也是这样。
《设计模式》中关于工厂方法的使用场景概况为三种:
1,一个类不知道它所创建的对象的类时
2,一个类希望由它的子类指定创建对象时
3,当类将创建对象的职责委托给多个帮助子类的时候....
将不同的数据库看做是产品,然后对应编写相应的工厂,这种情况属于上述三种情况哪一种:
http://blog.csdn.net/wyxhd2008/article/details/5597975这个讲的比较好懂
其实我想知道的是什么说工厂方法依靠继承解决问题,而抽象工厂依靠组合(或聚合)解决问题。