2010-08-15 56 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