我在Java / J2EE中有一个设计模式问题
问题陈述::
假设有2个文件如下
XYZ.properties文件 - > name = value pair
abc.xml文件 - > attribute = value对。
以上两个文件都有<name,value>
对。
问题是“设计组件/ jsp页面,以便您可以读取,编辑,保存属性文件或xml文件的名称,值对。”
那么你建议我应该在Java中使用哪种设计模式。?
然后获取名称,值对并显示在另一个jsp页面中,我应该能够读取,编辑,保存名称,值对等。
1&gt;读取操作导致读取名称,值对
2&gt;编辑操作会导致编辑名称,值对
3&gt;保存操作会导致保存数据库中相应名称,值对的值,从而更新property / xml文件。
**My Initial Analysis** : i would use a Factory design pattern since i have 2 files which have name,value pairs and at run time decide which one to choose depending on the name of file invoked,Once done i would pass the parameters to jsp file for Read,edit and save operation.Save would save the name,value pair to Database but i dont know how will it update the corresponding value for that name in either the property/xml file as well.
我的理解是否正确?如果没有,请在java中提供相同的设计/解决方案,以便对“.properties文件”或“.xml文件”中的对执行READ,EDIT,SAVE操作?
答案 0 :(得分:1)
这看起来像是家庭作业。 在不放弃太多的情况下,属性可以读取/写入.properties和.xml文件,有关http://download.oracle.com/javase/7/docs/api/java/util/Properties.html的更多信息。
答案 1 :(得分:1)
工厂模式可以完成这项工作。
创建一个抽象类,其中包含抽象读取,修改,保存方法以及键和值的getter和setter
为扩展抽象类的.properties和.xml实现创建两个单独的类。
每当您想要保存对类实例的检查并调用适当的方法时。
答案 2 :(得分:0)
我认为工厂模式是正确的。制作抽象的getInstance(fileName)
,read
,create
,update
,remove
方法。
作为建议,您可能希望在检入文件内容后返回已实现的实例 - 无论是XML(通过检查XML标头或是否存在根标记),还是属性文件。
理想情况下,我会创建一个看起来像这样的MyFileFactory类
public class MyFileFactory{
public static final MyFileFactory getInstance(String filename){
//read the file header or first line to guess what instance to call
int fileType = getFileType(fileName);
if(fileType == MyFileFactory.XML_FILE)
return new XMLFileEditor(fileName);
else
return new PropsFileEditor(fileName);
}
public abstract readFile();
public abstract writeToFile();
public abstract editFile();
}
让这些类实现方法
public class XMLFileEditor extends MyFileFactory{
...
private File f;
}
和
public class PropsFileEditor extends MyFileFactory{
...
private File f;
}
我觉得你很高兴。
如果要保存在数据库和文件中:
writeToFile(String new_Node_or_property){
//parseNode converts the property or XML node to an object
MyNode node = MyNode.parseNode(new_Node_or_property);
MyFileDAO.insert(node);//write a code that parse
// write here code to append in the file based on what
// filetype implentation it is -- XML, .properties, YAML whatever
}