一個倉庫,供應商和消費者。一個供應商只能生產一種類型的東西。一個消費者也可以只消費一種類型的東西。倉庫知道供應商和消費者,但他們都不知道彼此。
如何在此場景中爲所有參與者設計接口並使用泛型來模擬它,以演示倉庫如何與多個供應商,消費者和不同類型的東西協同工作。
一個倉庫,供應商和消費者。一個供應商只能生產一種類型的東西。一個消費者也可以只消費一種類型的東西。倉庫知道供應商和消費者,但他們都不知道彼此。
如何在此場景中爲所有參與者設計接口並使用泛型來模擬它,以演示倉庫如何與多個供應商,消費者和不同類型的東西協同工作。
我想你想有一個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
來處理它或者說「不能消耗那個,不是我的東西」。雖然有些事情你應該注意,但是如果不需要那麼強大,我不會擔心。爲什麼,http://www.javapractices.com/topic/TopicAction.do?Id=31有一個很好的解釋。
編輯:它可能看起來像消費者和供應商互相交互,特別是當你有像integerConsumer.consumeItem(integerSupplier.supplyItem());
這樣的行時,但需要注意的是消費者和供應商實際上並沒有互相交流。供應商只是簡單地生成一個新對象,而消費者則將其作爲一個參數。雖然倉庫知道消費者和供應商的存在,但消費者並不知道供應商的存在,反之亦然。
你有沒有想過一個2維矩陣的
矩陣的內容定義的「東西」,他們生產/消費,如果他們也被允許有一個關係。
會這樣嗎?
倉庫
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
對我來說,如果沒有一個具體的例子,該程序應該做什麼,這有點難以說出。直覺上,我會說你甚至不需要接口或泛型,因爲對象之間的差異可以通過屬性充分表徵。 – Nicolas78 2010-08-15 16:47:28
我想實現使用泛型,該程序應該解釋倉庫如何與多個供應商和消費者以及不同類型的東西進行合作,它的基礎是倉庫,客戶和供應商如何在現實生活中工作的正常業務。 – Rachel 2010-08-15 16:51:05
描述它們之間的交互的用例是什麼? – Paolo 2010-08-15 16:51:17