2010-08-15 88 views
3

方案如何處理這一設計問題

一個倉庫,供應商和消費者。一個供應商只能生產一種類型的東西。一個消費者也可以只消費一種類型的東西。倉庫知道供應商和消費者,但他們都不知道彼此。

如何在此場景中爲所有參與者設計接口並使用泛型來模擬它,以演示倉庫如何與多個供應商,消費者和不同類型的東西協同工作。

+1

對我來說,如果沒有一個具體的例子,該程序應該做什麼,這有點難以說出。直覺上,我會說你甚至不需要接口或泛型,因爲對象之間的差異可以通過屬性充分表徵。 – Nicolas78 2010-08-15 16:47:28

+0

我想實現使用泛型,該程序應該解釋倉庫如何與多個供應商和消費者以及不同類型的東西進行合作,它的基礎是倉庫,客戶和供應商如何在現實生活中工作的正常業務。 – Rachel 2010-08-15 16:51:05

+0

描述它們之間的交互的用例是什麼? – Paolo 2010-08-15 16:51:17

回答

2

我想你想有一個Supplier類和Consumer類實現泛型這樣你可能會實現你的WarehouseSupplier<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());這樣的行時,但需要注意的是消費者和供應商實際上並沒有互相交流。供應商只是簡單地生成一個新對象,而消費者則將其作爲一個參數。雖然倉庫知道消費者和供應商的存在,但消費者並不知道供應商的存在,反之亦然。

+1

倉庫類看起來更像main()方法。 – pavanlimo 2010-08-15 17:20:20

+0

我包含了一段代碼,以顯示'Consumer'和'Warehouse'如何被調用。我想這將取決於Rachel確切地說明倉庫中需要什麼:) – JBirch 2010-08-15 17:26:51

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