【发布时间】:2016-02-04 12:23:43
【问题描述】:
我的问题与设计有关。我将首先解释我正在做什么,然后是我认为应该改进但我不知道如何改进的当前方法,因此提出了这个问题!
简而言之,我解析一个原始字符串以获得名称、值对,然后将其显示在 GUI 上。现在这个原始字符串可以属于type01 或type02。 type 决定了我显示名称、值对的视图。
type01 - 包含凌乱的 xml,由于我想保留 xml 层次结构,因此我的视图包含 JXTreeTable。
type02 - name,value 数据比较容易提取,结构扁平。因此我对此的看法是JTable
我为这两个视图使用cardlayout。
现在让我解释一下我的实现。不幸的是,我无法上传任何代码,所以请多多包涵。无论如何,这更像是一个设计问题:)
- 收到字符串。 (可以是
type01或type02) - Factory 类创建适当的
Parser对象。 (type01Parser或type02Parser均由Parser超分类) -
Parser进行解析并将名称、值详细信息提取到Object。 -
Parsergetter 方法用于检索Object。我应该可以用它来更新我的 GUI (?)
我的问题在于包含提取的详细信息的Object。 type01Parser 最终创建了一个树形结构。其中每个节点代表一个名称、值对。 Object 基本上是根节点。 type02Parser 创建一个 ArrayList,其中每个元素都是一个名称、值对。在这种情况下,Object 是 ArrayList。
我可以从这里开始,但我真的很想遵循好的设计模式。我相信返回对象也应该以某种方式超类,封装更新功能?此外,我正在更新两个完全不同的 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