2

I have this situation:

An object that it's observable and another object that it is observer.

the observer has a method update(Observable obs,Object obj) that receive through notifyObservers the object changed.when observer receives the notify, update method prints the object changed. I want print out the result in a gui that implements MVC pattern.I'm following this guide MVC pattern. My idea is to make the Controller the observer. something like that:

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) 
    {

    }
}

but I don't know if it's a correct implementation!

4

3 回答 3

7

观察者模式MVC 模式是两种不同的设计模式——只是为了确保我们在同一页面上。

在 MVC(至少按照定义)模式中,视图应该在模型更改时自动更新,我猜这就是你想要做的。在这种情况下,这意味着您的 Observer 应该是 View,而不是 Controller,而您的 Model 将是您的 Observable 对象。

因此:

Observable changes --> update Observer

将在纯 MVC 模式中复制您尝试获得的内容:

Model changes --> update View

我并不是说这应该是做事的方式,但我认为如果你尝试将 Java 的 Observer/Observable 应用于 MVC 模式,这可能会继续进行。

于 2012-07-09T20:18:58.167 回答
5

观察者模式是 MVC 的一部分。它是 MVC 的一个组成部分。

观察者模式也是熟悉的模型-视图-控制器 (MVC) 架构模式中的关键部分。来源:https ://en.wikipedia.org/wiki/Observer_pattern

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

于 2015-07-27T05:55:45.150 回答
0

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

从表面上看,这个例子反映了一种将视图与模型分离的设计。但是该设计适用于一个更普遍的问题:解耦对象,以便对一个对象的更改可以影响任意数量的其他对象,而无需更改对象知道其他对象的详细信息。这种更通用的设计由观察者设计模式描述

稍后在同一部分

但是 MVC 中的主要关系由观察者、组合和策略设计模式给出。

于 2021-07-28T14:57:32.410 回答