说明:
1、此工厂为创建表格的工厂,由于所有表格都需要展示,所以均实现了Chart接口。
2、客户端根据配置文件里面的内容进行创建表格。用户只需要更改xml文件即可获取想要的产品。
3、表格工厂根据传来的表格类型进行创建相应的表,并且返回。
客户端Client
public class Client {
public static void main(String args[]) {
Chart chart;
//chart = ChartFactory.getChart("histogram"); //通过静态工厂方法创建产品
String type = XMLUtil.getChartType(); //读取配置文件中的参数
chart = ChartFactory.getChart(type); //创建产品对象
chart.display();
}
}
产品类
//抽象图表接口,充当抽象产品类
public interface Chart {
public void display();
}
//柱状图类,充当具体产品类
public class HistogramChart implements Chart {
public HistogramChart() {
System.out.println("创建柱状图!");
}
public void display() {
System.out.println("显示柱状图!");
}
}
//折线图类,充当具体产品类
public class LineChart implements Chart {
public LineChart() {
System.out.println("创建折线图!");
}
public void display() {
System.out.println("显示折线图!");
}
}
//饼状图类,充当具体产品类
public class PieChart implements Chart {
public PieChart() {
System.out.println("创建饼状图!");
}
public void display() {
System.out.println("显示饼状图!");
}
}
工厂类
//图表工厂类,充当工厂类
public class ChartFactory {
//静态工厂方法
public static Chart getChart(String type) {
Chart chart = null;
if (type.equalsIgnoreCase("histogram")) {
chart = new HistogramChart();
System.out.println("初始化设置柱状图!");
}
else if (type.equalsIgnoreCase("pie")) {
chart = new PieChart();
System.out.println("初始化设置饼状图!");
}
else if (type.equalsIgnoreCase("line")) {
chart = new LineChart();
System.out.println("初始化设置折线图!");
}
return chart;
}
}
文件读取util
import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;
public class XMLUtil {
//该方法用于从XML配置文件中提取图表类型,并返回类型名
public static String getChartType() {
try {
//创建文档对象
DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dFactory.newDocumentBuilder();
Document doc;
doc = builder.parse(new File("src//simplefactory//config.xml"));
//获取包含图表类型的文本结点
NodeList nl = doc.getElementsByTagName("chartType");
Node classNode = nl.item(0).getFirstChild();
String chartType = classNode.getNodeValue().trim();
return chartType;
}
catch(Exception e) {
e.printStackTrace();
return null;
}
}
}
文件内容 config.xml
<?xml version="1.0"?>
<config>
<chartType>pie</chartType>
</config>