工厂模式的疑问

redlan 02-12-30
    

设计模式之Factory

其中提到:
...让创建实例所需要的大量初始化工作从Sample的构造函数中分离出去。

这时我们就需要Factory工厂模式来生成对象了,不能再用上面简单new Sample(参数)。....

我认为工厂模式与被创建对象的构造函数做多少工作没有多大关系。最简单的例子:

Factory类的片断

public Sample getInstance(String arg) {
if (arg.equals("A")) {
return new SampleA();
} else if (arg.equals(
"B")){
return new SampleB();
}
}


这时候,我们仍然可以在SampleA的构造函数中做很多事情,情况如下:

public SampleA() {
//创建数据库连接
//查询数据库中某表的某个字段值,并赋值给实例变量
//等等
}


希望banq能不厌其烦为学生指点一二,谢谢。

    

richardluopeng
2002-12-30 13:32

呵呵,你这样好危险!
违反了OO的原则

fuzhou
2002-12-30 14:07

我也认为工厂模式解决的不是将初始化的大量工作从构造方法中分离出去的问题,而只能是说将使用该类时的紧耦合(用new Object()实现)变成一种松耦合,也就是使用的时候不直接创建对象,而是使用工厂方法,这样在将来有变动的时候可以非常轻松的改变code。

fuzhou
2002-12-30 14:08

不太明白,违反了什么oo的原则?是说sample中作的东西太多了,还是?????

banq
2002-12-30 15:20

封装(Encapsulation)和分派(Delegation)
sampleA class本身就定义自己是什么,而不要定义自己怎么构造的,比喻一个不是很恰当的例子: 人 作为一个class 如果让你来定义,你肯定定义这么几个属性:性别 高度 职业 等等,你不会将他如何出生以及如何长大的过程定义在里面。

这两种定义应该分派,分别封装在不同class中。

4Go 1 2 3 4 下一页