在视图中实现Observer(Java)

时间:2015-05-20 12:46:44

标签: java model-view-controller

我正在尝试将Observer模式实现到我使用MVC模式的程序中。我正在这样做,以便View可以看到我可能在模型中做的任何更改(我以后执行扫描仪输入并附加到已经存在的hashmap)。但我正在努力解决如何将Observer实施到我的程序中。

以下是观点:

package product.view;

import product.controller.Controller;

public class View{
    private Controller cont;

    public View(Controller cont) {
        this.cont = cont;
    }

    public void test() {
        cont.makeNewSale();
        enterItem(1);
    }

    private void enterItem(int itemId)  {
        int quantity = 1;

        try {   
            System.out.println("");
            System.out.println("Result for item " + itemId + ": " + cont.enterItem(itemId, quantity));
            System.out.println("");
        }
        catch (Exception e)  {
            System.out.println(e.getMessage());
        }
    }
}

以下是模型中的ProductCatalogue

package product.model;

import java.util.Map;

import java.util.HashMap;

public class ProductCatalog { 
    private Map<Integer, ProductSpecification> products = new HashMap<Integer, ProductSpecification>();


    public ProductCatalog() {
        products.put(1, new ProductSpecification(1, "low fat milk", 
   "a very long description, a very long description, a very long description", 10));
        products.put(2, new ProductSpecification(2, "butter", 
   "a very long description, a very long description, a very long description", 10));
        products.put(3, new ProductSpecification(3, "bread", 
   "a very long description, a very long description, a very long description", 10));
        System.out.println(products.toString());
    }

    public ProductSpecification findSpecification(int itemId) {
        return products.get(itemId);
    }

    boolean findSpecification() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

1 个答案:

答案 0 :(得分:2)

查看观察者模式的UML class diagramenter image description here

它向您展示了您需要的方法,甚至是部分实现方式。 基本上,该模型包含一个对象列表,它将调用某个方法。

你的问题是你没有精确地遵循这种模式并且混淆了问题。 String决定用户输入时会发生什么。 controller不应该告诉view要做什么,它应该只是告诉他,有一些用户输入。