【发布时间】:2017-07-03 14:48:34
【问题描述】:
我有一个要求,基类方法需要进一步细分。需要注册类对象。并且根据配置,我将决定要实例化哪个类。
class Base {
Base () { }
void methodOverride() { // do something; }
}
class Derived1 extends Base {
Derived1 () {
super();
}
void methodOverride() { // specialize }
}
class Derived2 extends Base {
Derived2 () {
super();
}
void methodOverride() { // specialize }
}
class SelectorFactory {
Base createClass( int type) {
switch (type) {
case DERIVED_1:
return new Derived1();
case DERIVED_2:
return new Derived2();
case BASE:
return new Base();
}
}
}
public static void main(String[] args){
// read configuration
int type = config.getIntType();
SelectorFactory factory = new SelectorFactory();
someRegisterMethod( factory.createClass(type) );
}
问题: 1.您认为还有另一种方法可以推荐吗?这是对这种设计模式的最佳使用吗?
【问题讨论】:
-
A
Hashmap<Integer, Base>是您所展示的另一种方式...除此之外,您能否展示可编译的代码?case Derived1没有意义 -
你认为还有其他方法可以实现吗?我对这个问题的回答是肯定的。但这真的对你有帮助吗?您的实际问题是什么?
-
我应该提到 - 这段代码不会编译。我只是试图模拟代码。
-
我不明白你为什么对 selectorFactory 类感到困扰。在上面的代码中它没有理由存在。
-
@Matt - 当然,这是我的问题。在这种情况下,您认为正确的方法是什么?注意:基类已经存在于一段我无法编辑的代码中。但是,我使用两个派生类对其进行了专门化来解决我的特定需求。
标签: java design-patterns