Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的待办事项列表应该使用哪种设计模式?_Java_Design Patterns_Oop - Fatal编程技术网

Java中的待办事项列表应该使用哪种设计模式?

Java中的待办事项列表应该使用哪种设计模式?,java,design-patterns,oop,Java,Design Patterns,Oop,对于一个非常简单的面向对象todo列表,我应该使用哪种设计模式 起初,我从Task、TaskList和Driver类开始。还有一个简单的UI,显示任务标题列表。当添加新任务时,我正努力让UI更新列表,在尝试解决这个问题时,我意识到我的整个布局可能是错误的 我想找人给我一个基本的指导,或者是一个设计模式图的链接,其中有一些关于我的类如何与该图相关的指导 谢谢。我想你想要观察者模式-但是看看前面的堆栈溢出问题我想你想要观察者模式-但是看看前面的堆栈溢出问题模型视图控制器(MVC)。基本上,模型存储任

对于一个非常简单的面向对象todo列表,我应该使用哪种设计模式

起初,我从Task、TaskList和Driver类开始。还有一个简单的UI,显示任务标题列表。当添加新任务时,我正努力让UI更新列表,在尝试解决这个问题时,我意识到我的整个布局可能是错误的

我想找人给我一个基本的指导,或者是一个设计模式图的链接,其中有一些关于我的类如何与该图相关的指导


谢谢。

我想你想要观察者模式-但是看看前面的堆栈溢出问题

我想你想要观察者模式-但是看看前面的堆栈溢出问题

模型视图控制器(MVC)。基本上,模型存储任务,控制器处理事件,视图显示。您可以有多个视图,即一个用于在UI中显示任务,另一个用于保存到磁盘

模型视图控制器(MVC)。基本上,模型存储任务,控制器处理事件,视图显示。您可以有多个视图,即一个用于在UI中显示任务,另一个用于保存到磁盘

另一条建议:假设您在Swing中编写UI,不要使用
DefaultTableModel
并将
Task
任务列表中复制到模型中(即不要将数据保存在两个位置)。相反,子类
AbstractTableModel
,并让它充当
任务列表的薄包装器;e、 g

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.
}

另一条建议:假设您在Swing中编写UI,不要使用
DefaultTableModel
并将
Task
中的
Task
复制到模型中(即不要将数据保存在两个位置)。相反,子类
AbstractTableModel
,并让它充当
任务列表的薄包装器;e、 g

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.
}

通用体系结构应该实现模型-视图-控制器(MVC)模式(或者模型-视图-演示器,具有更强的模型和视图解耦性),看起来,您已经开始这样做了。你有代表“任务”和“任务列表”的类,你有一个向用户展示任务列表(模型)的UI。现在,您需要为模型和ui提供一个接口(或一组接口),并希望确保模型不知道ui,ui也不知道模型

因为在这两者之间,您有presenter类,它将对模型更改和ui事件(观察者模式,数据绑定作为一种技术)作出反应。它可以监听模型并更新视图。因此,您希望使您的模型可见。它可以从视图中侦听事件(值编辑、操作)并将此信息传递给模型,因此它可以(尝试)适应用户预期的更改(模型和只有模型将验证用户输入并向演示者作出响应)


是的,很复杂。首先,将应用程序分为三个部分(模型、视图、控制器/演示者),并使模型可见。因此,您可以轻松地从模型更改时自动更新的视图开始。然后,一步一步地,您可以添加功能来对用户在UI上的输入做出反应。

通用体系结构应该实现模型-视图-控制器(MVC)模式(或者模型-视图-演示器,具有更强的模型和视图解耦功能),看起来,您已经开始这样做了。你有代表“任务”和“任务列表”的类,你有一个向用户展示任务列表(模型)的UI。现在,您需要为模型和ui提供一个接口(或一组接口),并希望确保模型不知道ui,ui也不知道模型

因为在这两者之间,您有presenter类,它将对模型更改和ui事件(观察者模式,数据绑定作为一种技术)作出反应。它可以监听模型并更新视图。因此,您希望使您的模型可见。它可以从视图中侦听事件(值编辑、操作)并将此信息传递给模型,因此它可以(尝试)适应用户预期的更改(模型和只有模型将验证用户输入并向演示者作出响应)


是的,很复杂。首先,将应用程序分为三个部分(模型、视图、控制器/演示者),并使模型可见。因此,您可以轻松地从模型更改时自动更新的视图开始。然后,您可以一步一步地添加功能,以便对用户在UI上的输入做出反应。

如果没有一些代码或图表,很难理解您的设计,但我会尝试一下

取决于您的具体情况,it列表是否在后端(数据库/控制器)中更新并反映在前端(View-html5,angularJs)中,或者反之亦然,或者它可能发生在您希望应用修复的位置(前端/后端)考虑应用FIX时的所有交互。< /P> 在前端可能的方法中

  • Ajax(数据从前端到后端来回流动)
  • AngularJSUse可以使用promise或简单的$http,或者像ng repeate这样简单的东西
  • HTML5-具有动态dataListControl之类的功能
  • 在后端可能的方法中

  • 观察者模式
  • 整个体系结构您可以将其扩展到事件驱动的体系结构 因为你觉得你的设计从一开始就错了
  • 由于您正在寻找基本方向,这可能会有所帮助

  • 有效-Java-2nd-Joshua-Bloch
  • 首屈一指的书
  • 2美分-使用一些框架,如果你开始设计之旅,它们会让生活变得更轻松。

    使用框架——比如说,SPRING强制您使用许多模式