编程语言
首页 > 编程语言> > java – 使用相同的基本类型创建不同的对象.工厂模式?

java – 使用相同的基本类型创建不同的对象.工厂模式?

作者:互联网

我必须为大学课程实现多个生产者/多个消费者示例应用程序,并且很难找到解决以下问题的解决方案,这不会让我觉得,我做错了什么;)

我必须实现一个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,但我想避免这种情况.

也许我正在想复杂的方法,并且已经完全过度设计了整个事情.请指出我正确的方向;)

解决方法:

在OO告诉对象为你做事的基础上,我会在每个组件上调用方法store()(在基类中将其定义为abstract),并传入Storage对象.您的子类将以自己的特定方式实现此方法,并与Storage对象进行协调以便存储自己.如果您这样做,那么您的Storage类不需要知道不同的组件,添加新的Component类型只需要该类的定义而在其他地方没有额外的工作.

我注意到在你的问题中你给人的印象是你的子类没有基类之外的其他功能(如果我已经正确阅读).它;正是因为这样的场景,子类应具有特定于其类型的功能.你是完全正确的.的instanceof.如果你必须使用它,那么它通常是一个指针,你没有使用OO的完全灵活性和/或你的对象分析是不对的.

标签:java,factory,producer-consumer
来源: https://codeday.me/bug/20190613/1235107.html