[英]Observer/observable objects with MVC pattern
我有這種情況:
一個對象是可觀察的,另一個對象是觀察者。
觀察者有一個方法update(Observable obs,Object obj)
通過notifyObservers
接收對象改變。當觀察者收到通知時,update 方法打印改變的對象。 我想在實現 MVC 模式的 gui 中打印結果。我正在遵循本指南MVC 模式。 我的想法是讓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)
{
}
}
但我不知道這是否是正確的實現!
觀察者模式和MVC 模式是兩種不同的設計模式 - 只是為了確保我們在同一頁面上。
在 MVC(至少根據定義)模式中,當模型更改時,視圖應該會自動更新,我猜這就是您想要做的。 在這種情況下,這意味着您的觀察者應該是視圖,而不是控制器,而您的模型將是您的可觀察對象。
因此:
Observable changes --> update Observer
將在某種程度上復制您試圖在純 MVC 模式中獲得的內容:
Model changes --> update View
我並不是說這應該是做事的方式,但我認為如果您嘗試將 Java 的 Observer/Observable 應用於 MVC 模式,這可能是可行的。
觀察者模式是 MVC 的一部分。 它是MVC的一個組成部分。
觀察者模式也是熟悉的模型-視圖-控制器 (MVC) 架構模式中的關鍵部分。 來源: https : //en.wikipedia.org/wiki/Observer_pattern
MVC 模式可以看作是這三種設計模式的組合:觀察者模式、復合模式和策略模式。 這意味着 Observer 和 MVC是兼容的。
在“設計模式 - 可重用設計元素”(臭名昭著的四人幫)一書中,第 1.2 節(SmallTalk MVC 中的設計模式)中,它在幾個地方提到了 MVC 如何使用觀察者模式,我在下面引用:
從表面上看,這個例子反映了一種將視圖與模型分離的設計。 但該設計適用於更普遍的問題:解耦對象,以便對一個對象的更改可以影響任意數量的其他對象,而無需更改對象了解其他對象的詳細信息。 這種更通用的設計由觀察者設計模式描述
然后在同一部分
但是MVC中的主要關系是由觀察者、復合和策略設計模式給出的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.