有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

具有MVC模式的java观察者/可观察对象

我有这样的情况:

一个可以观察到的物体和另一个可以观察到的物体

观察者有一个方法update(Observable obs,Object obj),该方法通过notifyObservers接收更改的对象。当观察者收到通知时,更新方法打印更改的对象。我想在实现MVC模式的gui中打印结果。我遵循这个指南。 我的想法是让Controller成为观察者。诸如此类:

public class Controller extends AbstractController implements Observer 
{
    public static final String TOTAL_HIT_COUNT_PROPERTY = "Total Hit";

    public void changeTotalHitCount(long new_total_hit_count)
    {
        setModelProperty(TOTAL_HIT_COUNT_PROPERTY, new_total_hit_count);
    }

    @Override
    public void update(Observable o, Object arg) 
    {

    }
}

但我不知道这是否是一个正确的实现


共 (3) 个答案

  1. # 1 楼答案

    观察者模式是MVC的一部分。它是MVC不可分割的一部分

    The Observer pattern is also a key part in the familiar model–view–controller (MVC) architectural pattern. Source: https://en.wikipedia.org/wiki/Observer_pattern

    MVC模式可以看作是这三种设计模式的组合:观察者模式、复合模式和策略模式。这意味着观察者和MVC是兼容的

  2. # 2 楼答案

    Observer PatternMVC Pattern是两种不同的设计模式——只是为了确保我们在同一页上

    在MVC(至少根据定义)模式中,当模型发生变化时,视图应该会自动更新,我猜这就是您要做的。在这种情况下,这意味着您的观察者应该是视图,而不是控制器,并且您的模型将是您的可观察对象

    因此:

    Observable changes  > update Observer
    

    将在某种程度上复制您试图在纯MVC模式中获得的内容:

    Model changes  > update View
    

    我并不是说这应该是一种做事的方式,但我认为如果您尝试将Java的Observer/Observable应用到MVC模式中,这可能会很快实现

  3. # 3 楼答案

    在《设计模式——可重用设计的元素》(臭名昭著的四人帮)一书的第1.2节(SmallTalk MVC中的设计模式)中,它在几个地方提到了MVC如何使用观察者模式,我引用如下:

    Taken at face value this example reflects a design that decouples views from models. But the design is applicable to a more general problem: decoupling objects so that changes to one can affect any number of others without requiring the changed object to know the details of the others. This more general design is described by the Observer design pattern

    在后面的同一节中

    But the main relationships in MVC are given by Observer, Composite and Strategy design Patterns.