我的问题与设计有关。我将首先解释我正在做什么,然后解释我目前的方法,我认为应该改进,但我不知道如何改进,因此提出了问题!
简而言之,我解析一个原始字符串来获取名称、值对,然后将其显示在 GUI 上。现在这个原始字符串可以属于 type01
或 type02
。 类型
决定了我在其上显示名称、值对的 View 。
type01
- 包含困惑的 xml,并且由于我想保留 xml 层次结构,因此我的 View 包含一个 JXTreeTable
。
type02
- 名称、值数据相对容易提取并且具有扁平结构。因此我对此的看法是 JTable
我对两个 View 使用cardlayout
。
现在让我解释一下我的实现。不幸的是,我无法上传任何代码,所以请耐心等待。无论如何,这更多的是一个设计问题:)
- 收到字符串。 (可以是
type01
或type02
) - 工厂类创建适当的
Parser
对象。 (type01Parser
或type02Parser
都是Parser
的父类(super class)) Parser
进行解析并将名称、值详细信息提取到Object
。Parser
getter 方法用于检索Object
。我应该能够使用它来更新我的 GUI(?)
我的问题在于包含提取的详细信息的对象
。 type01Parser
最终创建了一个树结构。其中每个节点代表一个名称、值对。 Object
基本上是根节点。 type02Parser
创建一个 ArrayList
,其中每个元素都是名称、值对。在本例中,Object
是 ArrayList
。
我可以从这里破解,但我真的想遵循良好的设计模式。我相信返回对象也应该以某种方式进行父类(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
}
最佳答案
假设您的字符串可能包含有关汽车或狗的信息。
您将获得最好的解析器,CarsParser
或 DogsParser
,它们都扩展了抽象类 Parser。
返回的对象应该是Car
或Dog
,具体取决于所使用的解析器。当然,两者都应该扩展相同的接口(interface)(假设Response
)。
然后,您将此对象传递给 View ,该 View 将根据类型在适当的 View 中显示内容。
根据您的 GUI 实现,Response
接口(interface)可能有一个返回 JTable
的方法。
关于java - 设计模式 - 使用通用对象来更新 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35200957/