java - 设计模式 - 使用通用对象来更新 GUI

标签 java swing oop design-patterns

我的问题与设计有关。我将首先解释我正在做什么,然后解释我目前的方法,我认为应该改进,但我不知道如何改进,因此提出了问题!

简而言之,我解析一个原始字符串来获取名称、值对,然后将其显示在 GUI 上。现在这个原始字符串可以属于 type01type02类型决定了我在其上显示名称、值对的 View 。

type01 - 包含困惑的 xml,并且由于我想保留 xml 层次结构,因此我的 View 包含一个 JXTreeTable

type02 - 名称、值数据相对容易提取并且具有扁平结构。因此我对此的看法是 JTable

我对两个 View 使用cardlayout

现在让我解释一下我的实现。不幸的是,我无法上传任何代码,所以请耐心等待。无论如何,这更多的是一个设计问题:)

  1. 收到字符串。 (可以是 type01type02)
  2. 工厂类创建适当的Parser对象。 (type01Parsertype02Parser 都是 Parser 的父类(super class))
  3. Parser 进行解析并将名称、值详细信息提取到 Object
  4. Parser getter 方法用于检索Object。我应该能够使用它来更新我的 GUI(?)

我的问题在于包含提取的详细信息的对象type01Parser 最终创建了一个树结构。其中每个节点代表一个名称、值对。 Object 基本上是根节点。 type02Parser 创建一个 ArrayList,其中每个元素都是名称、值对。在本例中,ObjectArrayList

我可以从这里破解,但我真的想遵循良好的设计模式。我相信返回对象也应该以某种方式进行父类(super class)化,封装更新功能?此外,我正在更新两个完全不同的 UI 元素这一事实使事情变得更加困惑。一些一般性的指导将受到高度赞赏。

虽然我无法发布任何代码,但让我尝试使用虚拟类来解释所有内容:) 请注意,我遗漏了很多内容,但总体思路已被捕获。希望

工厂类基本上扫描字符串并确定类型并创建所需的解析器对象

...
FactoryParser factory = new FactoryParser(rcvdString);
Parser parser = factory.getBestParser();
Object generalObjectHere = parser.getReturnObject();
...

//whaat next??

抽象解析器类

public abstract class Parser{

    Object returnObject=null;
    String str;

    public Parser(String s){
        str=s;
    }

    public void setReturnObject(Object obj){
        returnObject=obj;
    }  

    public Object getReturnObject(){
        return returnObject;
    }  

}

Type01解析器

public class Type01Parser{

    public Type01Parser(){

        initParser();
        setReturnObject(processAndDoStuff());
    }

    //bunch of methods to process the xml which is in String format.  

}

Type02解析器

public class Type02Parser{

    public Type02Parser(){

        initParser();
        setReturnObject(processAndDoStuff());
    }

    //bunch of methods to process the string

}

最佳答案

假设您的字符串可能包含有关汽车或狗的信息。

您将获得最好的解析器,CarsParserDogsParser,它们都扩展了抽象类 Parser。

返回的对象应该是CarDog,具体取决于所使用的解析器。当然,两者都应该扩展相同的接口(interface)(假设Response)。

然后,您将此对象传递给 View ,该 View 将根据类型在适当的 View 中显示内容。

根据您的 GUI 实现,Response 接口(interface)可能有一个返回 JTable 的方法。

关于java - 设计模式 - 使用通用对象来更新 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35200957/

相关文章:

java - 在XUL中设置java类(jar文件)的类路径,通过javascript访问

java - 在vlcj MediaPlayer上添加透明Swing组件?

java - 动态删除 Java Swing 容器(我的代码在按下按钮时挂起)

java - 从 JTable 中删除显示的数据

java - android 代码在使用 switch 语句时似乎出现错误

java - 如何使用java打印数组在i和i+1索引处的索引?

java - 处理三角函数时的浮点精度

java - Java 中范围和包的问题

javascript - 如何使倒计时可与对象重复使用?

python - 理解 Django 的模型类