我正在研究一些从全局变量中获取部分配置的类,例如
class MyClass {
public void MyClass(Hashtable<String, String> params) {
this.foo = GlobalClass.GLOBALVAR.get("foo");
this.bar = GlobalClass.GLOBALVAR.get("bar");
this.params = params;
}
}
这有几个原因很糟糕,GLOBALVAR 与数据库对话以获取一些变量,这使得进行单元测试变得非常困难。另一个问题是我有很多(几十个)继承自 MyClass 的类,所以我不能轻易更改构造函数签名。
我当前的解决方案是为params
,foo
和. 创建一个额外的默认构造函数和 setter 方法bar
。
class MyClass {
// Other code still here for backwards compatibility.
public void MyClass() {
// Do nothing much.
}
public void setParams(Hashtable<String, String> params) {
this.params = params;
}
public void setFoo(Foo foo) {
this.foo = foo;
}
public void setBar(Bar bar) {
this.bar = bar;
}
}
除了我这样做的方式之外,还有什么关于重构它的好方法的想法吗?我的另一个想法是使用工厂方法,但我担心我会遇到多态替换问题。