mar*_*inu 5 java factory producer-consumer
我必须为大学课程实现一个多生产者/多消费者示例应用程序,并且很难找到以下问题的解决方案,这并没有让我觉得我做错了什么;)
我必须实现 aProducer
产生给定类型的Component
( CPUComponent
, MainboardComponent
. 公共Component
类的所有子类)。a 的每个实例Producer
只会产生给定数量的一种类型的组件(例如只有主板),然后退出。
的Component
s为都或多或少不变的对象(仅final
字段)和所有逻辑都在共同的基类实现Component
(下面简化的)
public abstract class Component implements Serializable
{
private final long id;
public Component(int id) { ... }
public long getId()
{
return id;
}
}
Run Code Online (Sandbox Code Playgroud)
的子类Component
只是原始的,比如
public class CPUComponent extends Component
{
public CPUComponent(long id) { ... }
}
Run Code Online (Sandbox Code Playgroud)
由于语言是 Java,我无法使用泛型轻松解决此对象生成问题(就像在 C# 中一样,因为我无法在 Java 中实例化泛型类型参数的新对象)。所以我开始实现一个工厂
public interface ComponentFactory {
Component createComponent(Producer producer, boolean defective);
}
Run Code Online (Sandbox Code Playgroud)
并为每种Component
类型提供具体的工厂实现。
我现在的问题是,当我想将生成的组件存储在我的Storage
类中(只为消费者管理所有生成的组件)时,我需要弄清楚对象的确切类型(每个CPUComponent
等在它自己的架子中) ),但我只Component
从工厂得到一个(基本类型)。
所以现在唯一有帮助的就是instanceof
,但我认为必须有更好的解决方案来解决我的问题。
我能想到的另一个解决方案Producer
是为每种类型实现 a s Component
,但我想避免这种方式。
也许我正在考虑复杂的方法并且已经完全过度设计了整个事情。只要指出我正确的方向;)
基于 OO 是告诉对象为你做事,我会在你的每个组件上调用一个方法store()
(在你的基类中定义它abstract
),并传入Storage
对象。您的子类将以自己的特定方式实现此方法,并与Storage
对象进行协调以存储自身。如果您这样做,那么您的Storage
类不需要了解不同的组件,并且添加新Component
类型只需要该类的定义,而无需在其他地方进行额外的工作。
我注意到,在您的问题中,您给人的印象是您的子类除了基类之外没有其他功能(如果我没有正确阅读它)。正是因为这样的场景,子类应该具有特定于其类型的功能。你是绝对正确的。instanceof
。如果您必须使用它,那么它通常表明您没有充分利用面向对象的灵活性和/或您的对象分析不正确。
归档时间: |
|
查看次数: |
2755 次 |
最近记录: |