gpt4 book ai didi

java - 在 View 中实现观察者 (Java)

转载 作者:行者123 更新时间:2023-12-02 04:39:26 25 4
gpt4 key购买 nike

我正在尝试将观察者模式实现到使用 MVC 模式的程序中。我这样做是为了让 View 可以看到我在模型中可能做的任何更改(我稍后将执行扫描仪输入并附加到已经存在的 HashMap )。但我正在努力解决如何将观察者实现到我的程序中。

这是 View :

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.");
}
}

最佳答案

看看UML class diagram对于观察者模式: enter image description here

它向您展示了您需要哪些方法,甚至部分实现。基本上来说,模型保存一个对象列表,它将对其调用某个方法。

你的问题是你没有精确遵循模式并混合关注点。 Controller 决定用户输入后会发生什么。 View 不应该告诉 Controller 要做什么,它应该仅仅通知他,有一些用户输入。

关于java - 在 View 中实现观察者 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30350108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com