在视图中实现观察器(Java)
我正在尝试在使用MVC模式的程序中实现Observer模式。我这样做是为了让视图能够看到我在模型中所做的任何更改(稍后我将执行扫描程序输入并附加到已经存在的hashmap)。但是我正在努力解决如何在我的程序中实现观察器的问题 以下是视图:在视图中实现观察器(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
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(“尚未支持”);
}
}
查看观察者模式的:
它向您展示了您需要的方法,甚至是实现的一部分。
基本上说,模型持有一个对象列表,它将在其中调用某个方法
你的问题是,你没有准确地遵循模式,并混合关注点。
控制器决定用户输入时发生的情况。视图
不应该告诉控制器
该做什么,它应该仅仅通知他有一些用户输入。为什么要将控制器作为参数传递给视图的构造函数?实际上,为什么不传递模型?因为我希望所有调用都从控制器传递到模型。