方案
一个仓库,供应商和消费者。一个供应商只能生产一种类型的东西。一个消费者也可以只消费一种类型的东西。仓库了解供应商和消费者,但他们都不了解彼此。
如何为此场景中的所有角色设计界面,并使用泛型来模拟它,以演示仓库如何与多个供应商,消费者和不同类型的东西一起工作。
答案 0 :(得分:2)
我想您希望拥有一个Supplier
类和一个Consumer
类来实现泛型,以便您可以在Supplier<Clothes>
或Consumer<Food>
或其他内容中实现{ {1}}上课?
您可以尝试一下这方面的内容。我想这更有可能实施仿制药工厂。
Warehouse
消费者可能看起来像......
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;
}
}
我们希望打印“2”。您也可以更改您的消费方法,以取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());
而不是Object
的实例,并使用T
来处理它或说“不能消耗它,而不是我的东西。 “有些事情你应该注意instanceOf
,所以如果它不是那么强大我不会担心它。 http://www.javapractices.com/topic/TopicAction.do?Id=31对原因有很好的解释。
编辑:消费者和供应商可能看起来像彼此互动,特别是当你有像instanceOf
这样的行时,但重要的是要注意消费者和供应商实际上并没有互相交流那里。供应商只是生成一个新的对象,消费者将其作为一个参数。虽然Warehouse知道消费者和供应商的存在,但消费者并不知道供应商的存在,反之亦然。
答案 1 :(得分:0)
矩阵的内容定义了它们产生/消费的“东西”,以及它们是否允许有关系。
那会有用吗?
答案 2 :(得分:0)
仓库
public enum ITEMTYPE //known and public
Map<ITEMTYPE, count> items
Map<Supplier, ITEMTYPE> suppliers
registerSupplier(Supplier)
addItems(Supplier, count)
registerConsumer(Consumer)
consumeItems(Consumer, count)
供应商
ITEMTYPE type
ITEMTYPE getType()
消费
ITEMTYPE type
ITEMTYPE getType()
使用它的方式:
Warehouse w = new Warehouse()
Supplier s1 = new Supplier(ITEMTYPE pens)
w.registerSupplier(s1)
w.addItems(s1, 10) // Update the data structure in warehouse with validations
Consumer c1 = new Consumer(ITEMTYPE pens)
w.registerConsumer(c1)
w.consumeItems(c1, 5) // Update the data structure in warehouse with validations