【问题标题】:Design Patterns - Using generic object to update a GUI设计模式 - 使用通用对象更新 GUI
【发布时间】:2016-02-04 12:23:43
【问题描述】:

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

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

type01 - 包含凌乱的 xml,由于我想保留 xml 层次结构,因此我的视图包含 JXTreeTable

type02 - name,value 数据比较容易提取,结构扁平。因此我对此的看法是JTable

我为这两个视图使用cardlayout

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

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

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

我可以从这里开始,但我真的很想遵循好的设计模式。我相信返回对象也应该以某种方式超类,封装更新功能?此外,我正在更新两个完全不同的 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;
    }  

}

Type01Parser

public class Type01Parser{

    public Type01Parser(){

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

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

}

Type02Parser

public class Type02Parser{

    public Type02Parser(){

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

    //bunch of methods to process the string

}

【问题讨论】:

    标签: java swing oop design-patterns


    【解决方案1】:

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

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

    返回的对象应为CarDog,具体取决于所使用的解析器。当然,两者都应该扩展同一个接口(比如Response)。

    然后将此对象传递给视图,根据类型,视图将在正确的视图中显示内容。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-16
      • 1970-01-01
      • 2016-02-02
      • 1970-01-01
      • 2020-01-08
      相关资源
      最近更新 更多