场景
一个仓库,供应商和消费者。一个供应商只能生产一种类型的东西。一个消费者也可以只消费一种类型的东西。仓库知道供应商和消费者,但他们都不知道对方。
我如何为这个场景中的所有参与者设计接口(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/