RTRTRT
工厂模式中的抽象工厂类 有什么作用 ,我不明白 如果不用抽象工厂不也是可以实现对抽象层编程吗?例如:1.使用抽象工厂类,参数为 (factory A)        //    factory类为抽象工厂类2.不使用的话,参数为 (product A)            //    product类为抽象产品类具体工厂类,实际上也是返回一个具体产品类啊 ,那我直接用2 参数为抽象产品类 不一样吗, 抽象工厂类
不是多余吗?  求大神解惑 ,小弟感激不禁。工厂模式

解决方案 »

  1.   

    看这里,有很详细的解释 http://blog.csdn.net/zhangerqing/article/details/8194653
    不懂再问
      

  2.   

    大神你们好,非常感谢你们的解答,但是可能是我没有表述清楚,为何用抽象的意义我明白,可是我不太明白,为何工厂模式需要工厂类 ,我不觉得直接用抽象产品作参数有何不同,把一个产品new出来与return new 出来有什么区别吗??
      

  3.   

    普通工厂只生产一种产品,抽象工厂生产多种产品。
    比如一个抽象工厂可以生产面粉(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;
    }
    如果面包店想制作一种不同口味的面包,只需要换一家工厂就可以了
      

  4.   

    假设你在写一个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。设计模式往往是为了复杂的程序而存在的,随着经验的增长,慢慢就懂啦