定义:
简单工厂模式又称为静态工厂方法模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式不属于23中GoF设计模式。
优点:
缺点:
适用环境:
UML图
简单工厂模式目录结构
具体代码:
Client.java
package simpleFactory;
public class Client {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
TV tv;
String brandName=XMLUtilTV.getBrangName();
tv=TVFactory.produceTV(brandName);
tv.play();
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
}
}
}
接口类TV.java
package simpleFactory;
public interface TV {
public void play();
}
TV实现类-HaierTV.java
package simpleFactory;
public class HaierTV implements TV{
public void play() {
System.out.println("海尔电视播放中...");
}
}
TV实现类-HisenseTV.java
package simpleFactory;
public class HisenseTV implements TV{
public void play() {
System.out.println("海信电视播放中...");
}
}
工厂类simpleFactory.java
package simpleFactory;
public class TVFactory {
public static TV produceTV(String brand) throws Exception{
if(brand.equalsIgnoreCase("Haier")){
System.out.println("海尔电视生产中...");
return new HaierTV();
}
else if(brand.equalsIgnoreCase("Hisense")){
System.out.println("海信电视生产中...");
return new HisenseTV();
}
else {
throw new Exception("对不起暂时无法生产此类电视机!");
}
}
}
XML工具类XMLUtilTV.java
package simpleFactory;
import java.io.*;
import javax.xml.parsers.*;
import org.xml.sax.SAXException;
import org.w3c.dom.*;
public class XMLUtilTV {
public static String getBrangName() {
try {
//创建文档对象
DocumentBuilderFactory dFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder =dFactory.newDocumentBuilder();
Document doc;
doc=builder.parse(new File("simpleFactoryConfigTV.xml"));
//获取包含品牌名称的文本节点
NodeList nl=doc.getElementsByTagName("brandName");
Node classNode=nl.item(0).getFirstChild();
String brandName=classNode.getNodeValue().trim();
return brandName;
}
catch(Exception e) {
e.printStackTrace();
return null;
}
}
}
配置文件simpleFactoryConfigTV.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<brandName>Hisense</brandName>
</config>
结果: