我有一个基类过滤继承的对象
public abstract AbstractThing { };
而且大量的类继承它的集合
public ThingA extends AbstractThing { };
public ThingB extends AbstractThing { };
...
public ThingY extends AbstractThing { };
我有一个ThingCollector
对象,它包含了一组事的对象,即:
public class ThingCollector {
public void add(AbstractThing newThing);
}
ThingCollector类还包含允许的方法:
查询它具有哪种具体的东西,例如,
public Set<Class<? extends AbstractThing>> containsTypes();
获得的一个特定的具体类型,例如对事物的子集
public <S extends AbstractMeasurement> Set<S> getSubset(Class<S> type);
此刻我ThingCollector
实现包含Set<AbstractThing>
类型的私有字段。 add(...)
方法将所有内容添加到同一Set对象。 containsTypes()
和getSubset(...)
方法在迭代Set时使用反射来编织它们的魔法。
这工作,但它似乎凌乱。我确信必须有更好的方法!
你能否提出其他方法来构建我的解决方案?我确实认为有ThingCollector
维护一个单独设置的扩展AbstractThing
每个单独的类型,但:
这将意味着
ThingCollector
将可能包含几十集的对象。而在大多数使用情况下,几乎所有这些设置都是空的。即使有一个由AbstractThing
继承的几十件东西的家族,实际上在任何给定的ThingCollector
中只有几种不同类型的东西会包含在内。这也很混乱;每次我在
ThingCollector
中定义另一个Set时,我还需要添加新方法add(ThingZ t)
和getThingZSubset()
。
有没有更好的方法? 有没有可能帮助我的设计模式或不同的班级组织?我不赞成上面的界面查询和子集ThingCollector
的内容 - 所有建议都考虑到了!
我也应该加上......虽然第三方库(如建议的番石榴)确实存在,但我想避免在这种情况下使用它们。 – turingbot 2012-03-23 04:24:56
你应该展示你的实现代码 - “使用反射来编织他们的魔法”还不足以让我们知道什么可以改进。 – 2012-03-23 18:24:04