java - 如何解决这个设计问题

标签 java architecture

场景

一个仓库,供应商和消费者。一个供应商只能生产一种类型的东西。一个消费者也可以只消费一种类型的东西。仓库知道供应商和消费者,但他们都不知道对方。

我如何为这个场景中的所有参与者设计接口(interface)并使用泛型对其进行模拟,以演示仓库如何与多个供应商、消费者和不同类型的东西一起工作。

最佳答案

我想你想要一个 Supplier类和一个Consumer实现泛型的类,这样你就可以实现 Supplier<Clothes>Consumer<Food>或您的 Warehouse 中的其他内容类(class)?

您可以尝试类似的方法。我想这更有可能实现一个泛型工厂。

public class Supplier<T>{
    //You might decide you need an actual constructor that does something
    public Supplier(){}

    public T supplyItem(){
        return new T();
    }
}

消费者可能看起来像...

public class Consumer<T>{

    private int consumeCount = 0;

    //You might decide you need an actual constructor that does something
    public Consumer(){}

    public void consumeItem(T item){
        consumeCount++;
    }

    public int consumeCount(){
        return consumeCount;
    }
}

最后,您的仓库可能包含诸如...

Supplier<Integer> integerSupplier = new Supplier<Integer>();
Consumer<Integer> integerConsumer = new Consumer<Integer>();
Integer i = integerSuppler.supplyItem();
integerConsumer.consumeItem(i);
integerConsumer.consumeItem(integerSupplier.supplyItem());
System.out.println(integerConsumer.consumeCount());

我们希望打印“2”。您还可以更改您的消费方法以获取 Object 的实例。而不是 T ,并使用 instanceOf要么处理它,要么说“不能吃那个,不是我的东西。”使用 instanceOf 时应注意一些事项不过,如果不需要那么坚固,我就不会担心。 http://www.javapractices.com/topic/TopicAction.do?Id=31对原因有一个很好的解释。

编辑:看起来消费者和供应商正在相互交互,尤其是当您有像 integerConsumer.consumeItem(integerSupplier.supplyItem()); 这样的行时,但重要的是要注意消费者和供应商实际上并没有在那里相互交互。供应商只是生成一个新对象,而消费者将其作为参数。虽然仓库知道消费者和供应商的存在,但消费者不知道供应商的存在,反之亦然。

关于java - 如何解决这个设计问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3488250/

相关文章:

java - 服务层和UI界面

c# - 多个项目的单个缓存对象

http - 评论的编辑应该通过 POST 还是 PUT 发送?

python - Python 脚本中的架构最佳实践 - 一个函数调用所有其他函数,或者 "tree"其中一个函数调用调用其他函数的函数?

java - Spring-Boot:同时处理多个请求

java - 一些消息已被简化;使用 -Xdiags :Verbose to get full output 重新编译

java - 在 PictureTaken(byte[] data) 上解释来自 Android Camera 的原始图像数据

java - spring工具套件java透视显示空白

java - 如何使用循环手动对字符数组进行排序?

language-agnostic - 在编写任何代码之前如何规划应用程序的架构?