工厂模式中有个问题一直不解 求大神解惑

kaiseer3 2013-05-09 05:34:08
RTRTRT
工厂模式中的抽象工厂类 有什么作用 ,我不明白 如果不用抽象工厂不也是可以实现对抽象层编程吗?

例如:

1.使用抽象工厂类,参数为 (factory A) // factory类为抽象工厂类

2.不使用的话,参数为 (product A) // product类为抽象产品类

具体工厂类,实际上也是返回一个具体产品类啊 ,那我直接用2 参数为抽象产品类 不一样吗, 抽象工厂类
不是多余吗? 求大神解惑 ,小弟感激不禁。
...全文
235 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcf 2013-05-09
  • 打赏
  • 举报
回复
看这里,有很详细的解释 http://blog.csdn.net/zhangerqing/article/details/8194653 不懂再问
dracularking 2013-05-09
  • 打赏
  • 举报
回复
引用 4 楼 kaiseer3 的回复:
大神你们好,非常感谢你们的解答,但是可能是我没有表述清楚,为何用抽象的意义我明白,可是我不太明白,为何工厂模式需要工厂类 ,我不觉得直接用抽象产品作参数有何不同,把一个产品new出来与return new 出来有什么区别吗??
这个是所有工厂模式存在的基本意义,不仅仅是抽象工厂模式所特有的,工厂是屏蔽客户与产品直接打交道之存在。
  • 打赏
  • 举报
回复
我认为,抽象工厂和工厂方法模式的主要区别应该是在于创建对象的复杂度上。
lcf 2013-05-09
  • 打赏
  • 举报
回复
假设你在写一个API并且已经发布了,其中有一个类叫TomClass implements Cat,然后有一天你觉得TomClass不是一个好类,你想改用KittyClass implements Cat,但是你不能这么做,因为这样会导致使用你前一个版本的API的代码找不到TomClass。于是你为了向下兼容,你不得不保留TomClass,并且支持它里面的一些过时的功能,同时又要支持KittyClass的新功能。这时候你就头大了。 假设你有一个工厂类,CatFactory,内有一个方法Cat provideCat() {return new TomClass();}。当你想把TomClass换成KittyClass的时候,你可以安全地转换,因为你的API用户只知道CatFactory和Cat,而并不知道这个Cat是Tom还是Kitty。 设计模式往往是为了复杂的程序而存在的,随着经验的增长,慢慢就懂啦
kaiseer3 2013-05-09
  • 打赏
  • 举报
回复
我想不应该 仅仅是习惯 或者 好看吧
groovy2007 2013-05-09
  • 打赏
  • 举报
回复
普通工厂只生产一种产品,抽象工厂生产多种产品。 比如一个抽象工厂可以生产面粉(flour),黄油(butter),果酱(jam)和糖(sugar),然后一家面包店可以用这些产品来制作面包

class AbstractFactory {
    Butter makeButter();
    Flour makeFlour();
    Jam makeJam();
    Sugar makeSugar();
}

Bread bakeBread(AbstractFactory f) {
    Bread b = new Bread();
    b.useFlour(f.makeFlour());
    b.useButter(f.makeButter());
    b.useJam(f.makeJam());
    b.useSugar(f.makeSugar());
    return b;
}
如果面包店想制作一种不同口味的面包,只需要换一家工厂就可以了
kaiseer3 2013-05-09
  • 打赏
  • 举报
回复
引用 2 楼 fangmingshijie 的回复:
我认为,抽象工厂和工厂方法模式的主要区别应该是在于创建对象的复杂度上。
引用 3 楼 lcf 的回复:
看这里,有很详细的解释 http://blog.csdn.net/zhangerqing/article/details/8194653 不懂再问
大神你们好,非常感谢你们的解答,但是可能是我没有表述清楚,为何用抽象的意义我明白,可是我不太明白,为何工厂模式需要工厂类 ,我不觉得直接用抽象产品作参数有何不同,把一个产品new出来与return new 出来有什么区别吗??

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧