【发布时间】:2018-06-14 12:42:08
【问题描述】:
我正在实现一个工厂,这是一个负责跨应用程序管理令牌的类。我将在这个简化示例之后解释我面临的问题:
假设我们有我们的工厂类:
TokenManagerFactory.java:
public class TokenManagerFactory {
public static TokenManager create(String tokenType)
{
if ("JWT".equals(tokenType))
return new JwtTokenManagerImpl();
return null;
}
}
然后是我们的abstract interface:
public abstract interface TokenManager {
public String generateToken();
public boolean verifyToken();
}
最后是实现JwtTokenManagerImpl:
public class JwtTokenManagerImpl implements TokenManager {
//..Implementation of methods defined in interface (generateToken() and
// verifyToken())
public String aMethodNotDefinedInInterface() {
return "A very cool String";
}
}
现在我们要在我们的main 中创建一个 JwtTokenManager 实例:
main {
TokenManager tm = TokenManagerFactory.create("JWT");
tm.aMethodNotDefinedInInterface(); // <-- Compilation error.
}
方法 aMethodNotDefinedInInterface() 未为该类型定义 令牌管理器
如何调整此设计模式,以免出现此错误?在进行此类调用时向下转换似乎是一个苛刻的解决方案,我可以进行更高级别的调整来适应这种情况吗?
谢谢。
我标记了我最终使用的解决方案。
【问题讨论】:
-
aMethodNotDefinedInInterface是做什么的?额外的初始化? -
为什么
main需要知道具体的类型?JwtTokenManagerImpl是否打破单一职责?aMethodNotDefinedInInterface()的目的是什么? -
为什么要在那里调用实例特定的方法?它以某种方式使工厂变得无用,因为它存在于从具体实现中抽象出来。
标签: java oop design-patterns factory-pattern factory-method