簡體   English   中英

如何處理這個設計問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM