我的问题有点长。我正在学习抽象工厂模式。
我有一个抽象工厂的抽象类。我想分享混凝土工厂所需的“资源”。所以我只是将 AbstractFactory 中的变量设为静态
public class AbstractFactory{
private static Vector vector = new Vector();
protected Vector void getVector() {
return vector;
}
protected void setVector(Vector v){
this.vector = v;
}
public abstract Circle createCircle();
}
它的子类看起来像:
public class ConcreteFactory extends AbstractFactory{
public ConcreteFactory(){
super();
}
public Circle createCircle(){
Circle circle = new Circle();
getVector().add(circle);
return circle;
}
}
但是,我的老师说我不应该使用静态对象实例,因为静态变量经常用于一些常量。
因此,我对Vector使用实例变量 instance而不是静态变量 ,并且在实例化具体工厂时从外部传递向量。
所以我的课程的新设计将如下所示:
public class AbstractFactory{
private Vector vector;
protected Vector void getVector() {
return vector;
}
protected void setVector(Vector v){
this.vector = v;
}
public abstract Circle createCircle();
}
public class ConcreteFactory extends AbstractFactory{
public ConcreteFactory(Vector v){
super();
setVector(v);
}
public Circle createCircle(){
Circle circle = new Circle();
getVector().add(circle);
return circle;
}
}
**
我的问题是:为什么我不应该使用静态变量来共享对象?
**
当我创建具体工厂的实例时,在不传入 Vector 的情况下,在具体工厂之间共享资源会更容易。