我有几个扩展 BaseClass
的类。现在我想在 DelegatorContext
中静态定义一个 Activity 类,并且每个对象的创建都应该基于 Activity 上下文。
例子:
class BaseClass {
String firstname, lastname;
}
class FirstClas extends BaseClass {}
class SndClass extends BaseClass {}
class DelegatorContext {
public static BaseClass activeClass;
}
class Delegator {
BaseClass create(String firstname, String lastname) {
return DelegatorContext.activeClass instanceof FirstClass
? new FirstClass(firstname, lastname) : new SndClass(firstname, lastname);
}
}
如果引入更多实体扩展 BaseClass
,该示例将获得更多样板。
有没有更好的模式来解决我的问题?甚至可能使用 Java8 和 Functions
?还是泛型?
我正在使用这个构造来能够在运行时切换实现...
最佳答案
我猜,你的意思是这样的:
interface BaseClassFactory {
BaseClass create(String firstname, String lastname);
}
class DelegatorContext {
public static BaseClassFactory active;
}
…
DelegatorContext.active=FirstClass::new;
…
DelegatorContext.active=SndClass::new;
这要求所有的子类都有一个具有相同签名的构造函数,匹配工厂接口(interface)的签名(有趣的是给了一个例子 this recent question )
你真的不需要其他工厂类,但为了完整起见,它将是:
class Delegator {
BaseClass create(String firstname, String lastname) {
return DelegatorContext.active.create(firstname, lastname);
}
}
关于java - 如何通过类类型委托(delegate)构造函数的实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29408151/