2009-09-18 38 views
0

對於一個非常簡單的面向對象的待辦事項列表,我應該使用哪種設計模式?我應該將哪種設計模式用於Java中的TODO列表?

起初,我開始了與類任務,任務列表,驅動程序。也是一個簡單的用戶界面,顯示任務標題列表。當新的任務被添加時,我努力讓UI更新列表,並試圖解決這個問題,我意識到我的整個佈局可能是錯誤的。

我找人給我一個基本的方向,或者一個鏈接到一個設計模式圖上我的課如何與圖中的一些指導。

謝謝。

回答

1

一般的結構應實現模型 - 視圖 - 控制器(MVC)模式(或模型 - 視圖 - 演示與模型和視圖的強脫鉤),它看起來像你開始與已經。你有類,代表'任務'和'任務列表',你有一個用戶界面來向用戶展示任務列表(模型)。現在,您需要一個用於模型和用戶界面的接口(或一組接口),並且您要確保該模型不知道用戶界面,並且用戶界面不知道該模型。

因爲在之間,必須演示類(ES),將上模型的變化和UI事件(觀察者模式,數據綁定作爲一種技術)反應。它可以聽取模型並更新視圖。所以你想讓你的模型可觀察。它可以偵聽來自視圖的事件(值編輯,動作),並將這些信息傳遞給模型,以便它(可以嘗試)適應用戶想要的更改(模型,只有模型會驗證用戶輸入並給出對演講者的迴應)。

是的,這是相當複雜的。首先,將您的應用程序分爲三部分(模型,視圖,控制器/演示者)並使模型可觀察。因此,您可以輕鬆啓動一個視圖,該視圖在模型更改時自動更新。然後,一步一步地,您可以添加功能以對用戶界面上的用戶輸入做出反應。

1

我想你想的觀察者模式 - 但看看這個以前的堆棧溢出問題Should I use a Listener or Observer?

+0

嗨jskaggz,這將是有用的UI部分,但我希望對解決方案的整體方法的一些指導。 – cheesysam 2009-09-18 05:30:39

+0

我的錯,我以爲你要求指出正確的模式。 :-P如果你正在使用java,那麼切換到chase,獲取實現觀察者模式的glazed lists(http://www.glazedlists.com/) – Jubal 2011-06-03 19:07:32

1

模型 - 視圖 - 控制器(MVC)。基本上,模型存儲任務,控制器處理事件和查看顯示。您可以有多個視圖,即一個用於在UI中顯示任務,另一個用於保存到磁盤。

2

另一個忠告:假設你正在寫在Swing你的UI,使用DefaultTableModel並從TaskList複製Task s轉換模型(即不要在兩個地方保存數據)。取而代之的是子類AbstractTableModel,它可以作爲TaskList周圍的薄包裝;例如

public class TaskTableModel extends AbstractTableModel { 
    private final TaskList taskList; 

    public TaskTableModel(TaskList taskList) { 
    this.taskList = taskList; 
    } 

    public Object getValueAt(int row, int column) { 
    Task task = taskList.getTask(row); 
    Object ret; 

    switch(column) { 
     case 0: 
     ret = task.getStartTime(); 
     break; 
     case 1: 
     ret = task.getState(); 
     break; 
     // etc ... 
    } 

    return ret; 
    } 

    // TODO: Implement other TableModel methods. 
} 
+0

目前,我的Tasklist類存儲了一個類型爲「Task」對象的ArrayList。你認爲在桌上做這件事會更好嗎? – cheesysam 2009-09-19 01:45:10

+0

這是我通常採用的這種類型的問題,其中表中的每行對應於業務對象,每列是業務對象的屬性之一。我會遠離JList;該API太糟糕了,你總是可以用單個列JTable來模擬它。 – Adamski 2009-09-19 11:34:54

-1

很難了解您的設計沒有一些代碼或示意圖,但我會試一試

取決於你的具體情況是名單被更新在後端(數據庫/控制器),並反映在前端(查看-HTML5,angularJs),反之亦然,也可以在任何地方要應用的修補程序(前端/後端)的地方的發生考慮所有的交互,同時應用固定。

在前端可能的方法

  1. 阿賈克斯(數據來回流動,從前端至後端)
  2. 角JS使用可以使用承諾或簡單的$ HTTP,或一些如簡單如ng-repeate。
  3. HTML5 - 有動態的東西dataListControl

在後端可能的方法

  1. Observer模式
  2. 整體架構,你可以去儘可能一個事件驅動的架構https://martinfowler.com/articles/201701-event-driven.html 爲你從頭開始覺得你的設計是錯誤的。

正如你所尋找的基本方向,這可能有助於

  1. https://martinfowler.com/aboutMe.html
  2. 有效-Java的第2 - 約書亞 - 布洛赫
  3. 頭第一本書

2美分 - 使用一些框架,他們讓生活更輕鬆,如果你正在開始設計之旅。

使用框架,讓我們說的彈簧力,你使用很多模式沒有你甚至不知道他們如MVC,前端控制器,AOP,辛格爾頓(豆),模板(JDBC,使用JpaTemplate)等

快樂設計,直到然後:)

+0

嗨Arvind。無視我在2009年問過這個問題! 你已經回答了這個問題,完全令人困惑的問題是關於Java的問題和JavaScript,它們不可能有更大的不同!爲什麼你在我的頁面中加入了一個關於Martin Fowlers的鏈接,我不知道。 – cheesysam 2017-05-10 08:22:42

相關問題