我必须为大学课程实现多个生产者/多个消费者示例应用程序,并且很难找到解决以下问题的解决方案,这不会让我觉得,我做错了什么;)
我必须实现一个Producer,它生成一个给定类型的Component(CPUComponent,MainboardComponent.一个公共Component类的所有子类).生产者的每个实例仅生成给定数量的一种类型的组件(例如仅主板),然后退出.
组件都或多或少是不可变对象(只有最终字段),所有逻辑都在公共基类组件中实现(下面简化)
public abstract class Component implements Serializable
{
private final long id;
public Component(int id) { ... }
public long getId()
{
return id;
}
}
Component的子类只是原始的,就像
public class CPUComponent extends Component
{
public CPUComponent(long id) { ... }
}
由于语言是Java,我无法使用Generics轻松解决此对象生成(因为我无法在C#中实现,因为我无法在Java中实例化泛型类型参数的新对象).所以我开始实施一个工厂
public interface ComponentFactory {
Component createComponent(Producer producer, boolean defective);
}
并为每种Component类型提供具体的工厂实现.
我现在遇到的问题是,当我想将生产的组件存储在我的Storage类中时(只管理所有生成的组件供消费者使用),我需要弄清楚对象的确切类型(每个CPUC组件等等)自己的货架),但我只从工厂获得一个组件(基本类型).
所以现在唯一有用的东西就是instanceof,但我认为必须有一个更好的解决方案来解决我的问题.
我能想到的另一个解决方案是为每种类型的Component实现Producers,但我想避免这种情况.
也许我正在想复杂的方法,并且已经完全过度设计了整个事情.请指出我正确的方向;)