简略工厂模式
Simple Factory Pattern:定义一个工厂类,它能够依据参数的不同返回不同类的实例,被创立的实例通常都具备独特的父类。
角色:工厂角色、形象产品角色、具体产品角色
代码如下
形象产品角色
public interface Chart {public void display();
}
具体产品角色
public class LineChart implements Chart{public LineChart() {System.out.println("创立条状图");
}
@Override
public void display() {System.out.println("显示条状图");
}
}
public class PieChart implements Chart {public PieChart() {System.out.println("创立饼状图");
}
@Override
public void display() {System.out.println("显示饼状图");
}
}
工厂角色
public class ChartFactory {public static Chart getChart(String type) {
Chart chart = null;
if ("pie".equalsIgnoreCase(type)) {
// 创立饼状图
System.out.println("创立饼状图");
chart = new PieChart();} else if ("line".equalsIgnoreCase(type)) {
// 创立条状图
System.out.println("创立条状图");
chart = new LineChart();}
return chart;
}
}
客户端
public class Client {public static void main(String[] args) {/* Chart chart = ChartFactory.getChart("line");
chart.display();*/
String chartType = XMLUtil.getChartType();
Chart chart = ChartFactory.getChart(chartType);
chart.display();}
}
因为在测试中须要去控制代码参数,违反开闭准则,能够将其拆解至配置文件中,失去一个工具类
<?xml version="1.0" encoding="UTF-8" ?>
<config>
<chartType>line</chartType>
</config>
public class XMLUtil {public static String getChartType(){
try {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document;
document = builder.parse("src//com//nq/SFP//config.xml");
NodeList nodeList = document.getElementsByTagName("chartType");
Node node = nodeList.item(0).getFirstChild();
String chartType = node.getNodeValue().trim();
return chartType;
} catch (Exception e) {e.printStackTrace();
return null;
}
}
}
长处:
- 对象创立与应用的拆散
- 缩小简单的类名应用
- 进步零碎灵活性
毛病:
- 工厂类一旦职责过重,整个零碎都要受到影响
- 减少了零碎的复杂程度和了解难度
- 不利于零碎的扩大和保护
实用场景:
- 工厂类负责创立的对象比拟少,不会造成工厂办法中的业务逻辑过于简单。
- 客户端只晓得传入工厂类的参数,对于如何创建对象并不关怀。