[英]How to approach this design problem
腳本
一個倉庫,供應商和消費者。 一個供應商只能生產一種類型的東西。 一個消費者也可以只消費一種類型的東西。 倉庫了解供應商和消費者,但他們都不了解彼此。
如何為此場景中的所有角色設計界面,並使用泛型來模擬它,以演示倉庫如何與多個供應商,消費者和不同類型的東西一起工作。
我想你想擁有一個實現泛型的Supplier
類和Consumer
類,以便你可以在Warehouse
類中實現Supplier<Clothes>
或Consumer<Food>
或其他東西?
您可以嘗試一下這方面的內容。 我想,這更有可能實施仿制葯工廠。
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
來處理它或者說“不能消耗它,而不是我的東西”。 盡管如此,有些事情你應該小心使用instanceOf
,所以如果它不是那么強大我不會擔心它。 http://www.javapractices.com/topic/TopicAction.do?Id=31對原因有很好的解釋。
編輯:消費者和供應商可能看起來像彼此互動,特別是當你有像integerConsumer.consumeItem(integerSupplier.supplyItem());
這樣的integerConsumer.consumeItem(integerSupplier.supplyItem());
但重要的是要注意消費者和供應商實際上並沒有在那里互相交流。 供應商只是生成一個新的對象,消費者將其作為一個參數。 雖然Warehouse知道消費者和供應商的存在,但消費者不知道供應商的存在,反之亦然。
你有沒有想過二維矩陣?
矩陣的內容定義了它們產生/消費的“東西”,以及它們是否允許有關系。
那會有用嗎?
倉庫
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.