我正在尝试将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.");
}
}
答案 0 :(得分:2)
查看观察者模式的UML class diagram:
它向您展示了您需要的方法,甚至是部分实现方式。 基本上,该模型包含一个对象列表,它将调用某个方法。
你的问题是你没有精确地遵循这种模式并且混淆了问题。
String
决定用户输入时会发生什么。 controller
不应该告诉view
要做什么,它应该只是告诉他,有一些用户输入。