具有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)
{
}
}
但我不知道这是否是一个正确的实现
# 1 楼答案
观察者模式是MVC的一部分。它是MVC不可分割的一部分
MVC模式可以看作是这三种设计模式的组合:观察者模式、复合模式和策略模式。这意味着观察者和MVC是兼容的
# 2 楼答案
Observer Pattern和MVC Pattern是两种不同的设计模式——只是为了确保我们在同一页上
在MVC(至少根据定义)模式中,当模型发生变化时,视图应该会自动更新,我猜这就是您要做的。在这种情况下,这意味着您的观察者应该是视图,而不是控制器,并且您的模型将是您的可观察对象
因此:
将在某种程度上复制您试图在纯MVC模式中获得的内容:
我并不是说这应该是一种做事的方式,但我认为如果您尝试将Java的Observer/Observable应用到MVC模式中,这可能会很快实现
# 3 楼答案
在《设计模式——可重用设计的元素》(臭名昭著的四人帮)一书的第1.2节(SmallTalk MVC中的设计模式)中,它在几个地方提到了MVC如何使用观察者模式,我引用如下:
在后面的同一节中