determineSubClass
当所有涉及的类都在同一个项目中(是 的成员)时,以下代码可以很好地工作BaseClass
:
protected static BaseClass determineSubClass(String p1, int p2, Boolean p3) {
BaseClass baseObj = null;
if ( (baseObj = SubClassOne.ofType(p1, p2, p3)) != null )
return baseObj;
else if ( (baseObj = SubClassTwo.ofType(p1, p2, p3)) != null )
return baseObj;
else if ( (baseObj = SubClassThree.ofType(p1, p2, p3)) != null )
return baseObj;
else if ( (baseObj = SubClassFour.ofType(p1, p2, p3)) != null )
return baseObj;
else
return new SubClassDefault(p1, p2, p3);
}
但现在,我想将 移动BaseClass
到一个共享库项目,其中SubClassOne
、SubClassTwo
和SubClassThree
并没有SubClassFour
在库中定义,而是在使用该库的应用程序中定义。
我当然可以BaseClass
回到使用这个库的每个应用程序,但我想知道:
- 有更好的解决方案吗?
- 有没有一种解决方案可以让我保留
BaseClass
在 Library 项目中并消除它了解从它派生的所有超类的需要?
编辑(回答下面的@ahmet alp balkan 问题):
ofType()
每个子类做两件事:
- 根据 String p1 的内容和其他参数 p2 和 p3 确定要实例化的子类是否属于它的类型。
- 如果答案是肯定的,它会实例化一个 self 子类的对象。否则,返回 null。
至于您的第二个问题,BaseClass
此时所有子类都拥有公共数据成员和方法,并且只有这个静态方法旨在委派确定要实例化的子类的责任。
顺便说一句,多亏了你的问题,我注意到我原来的帖子中有一个可怕的错字:“SuperClassOne”应该是“SubClassOne”等。