简单工厂和工厂模式

简单工厂模式的核心是一个工厂方法,但在工厂方法里还需要if,switch来判断生成哪个对象,破坏了开闭原则.
Base base = factor.Create("A");
Base base = factor.Create("B");

工厂模式,抽象出一个抽象工厂类,把创建对象的方法放到工厂的子类里,由客户来选择哪家工厂来生成对象,需要增加对象时,只需要增加一个工厂子类就行,符合开闭原则.
Base base = factorA.Create();
Base base = factorB.Create();

但是,由客户来选择工厂来生成对象,和原来直接new一个对象有什么好处呢?
Base base = new A();
Base base = new B();

如果我把new A();和new A();配置到文件里,再通过反射等技术,生成所需要的对象,也没必要再加一层子工厂类啊?

简单工厂模式,想增加生产线就要重写工厂类的方法;
BaseCar carA=Factory.CreateCar(“A”);
BaseCar carB=Factory.CreateCar(“B”);
工厂方法模式,也就是你说的“工厂模式“,可以动态增加生产线,调用者想要哪个型号的产品(对象),直接调用相应的工厂就行了,这里每个工厂只有一条生产线;
BaseCar carA=FactoryA.CreateCar();
BaseCar carB=FactoryB.CreateCar();
(这里所说的生产线是指生产出来的对象都基于一个Base类。)
而还有更高级的抽象工厂模式,就是每个工厂可以生产多个不同Base类衍生出来的类,也就是说对这一个工厂来讲是多条生产线,各个生产线对应不同的”商品“了。
BaseCar carA=FactoryA.CreateCar();
BaseCup cupA=FactoryA.CreateCup();
BaseCar carB=FactoryB.CreateCar();
BaseCup cupB=FactoryB.CreateCup();
[该贴被root于2012-12-17 16:30修改过]

所谓工厂就是跟 现实世界的工厂一样,进行统一加工管理。
楼主 如果A对象使用的不多,那就 直接new吧,
工厂 可以初始化对象,包括复杂的初始化,如果很多地方使用A是不是 会初始化很麻烦,并且重复。
如果初始化 要改变,是不是 很多地方都要改,有了工厂就不一样了,有一个 统一的工厂,因为对象都是它 创建的。