1,为什么需要对象工厂?
我们创建一个对象时,必须给出具体型别,new A也好,new B也罢。A,B都是对象的型别。我们向来反对写hardcode,但却在创建对象时必须hardcode。
如果需要根据用户的输入信息,或是网络反馈信息,或是文本文件信息来创建对象时,应该怎么办呢?
最初我们想法可能是这样的,伪代码
这就是大家都熟悉简单工厂模式,他虽然简单,但蕴含一个基本原则:根据value(a,b...)查找type(A,B...),利用type创建value(A*,B*...)。
利用对象工厂,我们创建对象时得到了解脱,无需写hardcode,不必给出类型,我们可以提供数字,字符串,以及特定格式信息来创建一个对象。
好的,这就是对象工厂存在的意义!
2.简单工厂不够完美吗?
是的,不够完美。理由有三:
它使用了switch语句,因而带有switch语句相应缺点,这是面向对象极力消除的东西(switch本身就是一种hardcode,所以面向对象:多态)
工厂类需要收集其生产的所有类型信息&#
我们创建一个对象时,必须给出具体型别,new A也好,new B也罢。A,B都是对象的型别。我们向来反对写hardcode,但却在创建对象时必须hardcode。
如果需要根据用户的输入信息,或是网络反馈信息,或是文本文件信息来创建对象时,应该怎么办呢?
最初我们想法可能是这样的,伪代码
switch(Info)
{
case a: return new A;
case b: return new B;
...
default:...
}
这就是大家都熟悉简单工厂模式,他虽然简单,但蕴含一个基本原则:根据value(a,b...)查找type(A,B...),利用type创建value(A*,B*...)。
利用对象工厂,我们创建对象时得到了解脱,无需写hardcode,不必给出类型,我们可以提供数字,字符串,以及特定格式信息来创建一个对象。
好的,这就是对象工厂存在的意义!
2.简单工厂不够完美吗?
是的,不够完美。理由有三:
它使用了switch语句,因而带有switch语句相应缺点,这是面向对象极力消除的东西(switch本身就是一种hardcode,所以面向对象:多态)
工厂类需要收集其生产的所有类型信息&#