在视图中实现观察器(Java)

在视图中实现观察器(Java),java,model-view-controller,Java,Model View Controller,我正在尝试在使用MVC模式的程序中实现Observer模式。我这样做是为了让视图能够看到我在模型中所做的任何更改(稍后我将执行扫描程序输入并附加到已经存在的hashmap)。但是我正在努力解决如何在我的程序中实现观察器的问题 以下是视图: package product.view; import product.controller.Controller; public class View{ private Controller cont; public View(Con

我正在尝试在使用MVC模式的程序中实现Observer模式。我这样做是为了让视图能够看到我在模型中所做的任何更改(稍后我将执行扫描程序输入并附加到已经存在的hashmap)。但是我正在努力解决如何在我的程序中实现观察器的问题

以下是视图:

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());
        }
    }
}
以下是型号中的
产品目录

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.");
    }
}
package-product.model;
导入java.util.Map;
导入java.util.HashMap;
公共类产品目录{
私有映射产品=新HashMap();
公共产品目录(){
产品。put(1,新产品规格(1,“低脂牛奶”,
“很长的描述,很长的描述,很长的描述”,10);
产品。put(2),新产品规格(2,“黄油”,
“很长的描述,很长的描述,很长的描述”,10);
产品.put(3,新产品规范(3,“面包”,
“很长的描述,很长的描述,很长的描述”,10);
System.out.println(products.toString());
}
公共产品规范findSpecification(int itemId){
退货产品。获取(itemId);
}
布尔findSpecification(){
抛出新的UnsupportedOperationException(“尚未支持”);
}
}
查看观察者模式的:

它向您展示了您需要的方法,甚至是实现的一部分。 基本上说,模型持有一个对象列表,它将在其中调用某个方法

你的问题是,你没有准确地遵循模式,并混合关注点。
控制器决定用户输入时发生的情况。
视图
不应该告诉
控制器
该做什么,它应该仅仅通知他有一些用户输入。

为什么要将控制器作为参数传递给视图的构造函数?实际上,为什么不传递模型?因为我希望所有调用都从控制器传递到模型。