组合模式设计
请问如何修改才能让测试类更简洁,是否有方法能够通过配置文件调用同类的不同名称对象呢(不需要修改源代码的条件下)?
下面是我的XMLUtil:
package Composite.Composite;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
public class XMLUtil {
public static String getBean(){
try
{
DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dFactory.newDocumentBuilder();
Document doc;
doc = builder.parse(new File("config.xml"));
NodeList nl = doc.getElementsByTagName("Name");
Node classNode = nl.item(0).getFirstChild();
String name = classNode.getNodeValue();
return name;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
config.xml:
<?xml version="1.0" ?>
<config>
<component>
<Name>CS</Name>
</component>
<!-- 可以添加更多的组件 -->
</config>
Client:
package Composite.Composite;
public class Client {
public static void main(String args[])
{
YZY0716Container dep,CS,ME,SE,AI,MD,EPD;
YZY0716Stu stu;
dep = new YZY0716Container("教务部");
CS = new YZY0716Container("计算机学院");
ME = new YZY0716Container("机械工程学院");
SE = new YZY0716Container("软件工程系");
AI = new YZY0716Container("人工智能系");
MD = new YZY0716Container("机械系");
EPD = new YZY0716Container("能动系");
stu = new YZY0716Stu("张三"); SE.add(stu);
stu = new YZY0716Stu("李思"); SE.add(stu);
stu = new YZY0716Stu("王舞"); SE.add(stu);
stu = new YZY0716Stu("刘俊"); AI.add(stu);
stu = new YZY0716Stu("李晓"); AI.add(stu);
stu = new YZY0716Stu("赵慧"); MD.add(stu);
stu = new YZY0716Stu("王芳"); MD.add(stu);
stu = new YZY0716Stu("阳湘"); EPD.add(stu);
stu = new YZY0716Stu("田甜"); EPD.add(stu);
CS.add(SE);CS.add(AI); ME.add(MD);ME.add(EPD);
dep.add(CS);dep.add(ME);
String name = XMLUtil.getBean();
if(name.equals("dep")) dep.inform();
else if(name.equals("CS")) CS.inform();
else if(name.equals("ME")) ME.inform();
else if(name.equals("SE")) SE.inform();
else if(name.equals("AI")) AI.inform();
else if(name.equals("MD")) MD.inform();
else if(name.equals("EPD")) EPD.inform();
else System.out.println(name + "该组织不存在!");
}
}