在简单的工厂模式中,工厂类根据工厂方法所传入的参数来动态的决定应该创建出哪一个产品类的实例。
上代码:
//抽象产品类TV
public interface TV {
public void play();
}
//具体产品类
public class HaierTV implements TV{
@Override
public void play() {
System.out.println("海尔电视机播放中。。。。。。。。。。");
}
}
//具体产品类
public class HisenseTV implements TV{
public void play(){
System.out.println("海信电视机播放中。。。。。。。。");
}
}
//工厂类生产不同的电视机
public class TVFactory {
public static TV producedTV(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{
try {
throw new Exception("对不起,暂不能生产该品牌的电视机!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return null;
}
}
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XMLUtilTV {//XML操作工具类
public static String getBrandName(){
try {
//创建文档对象
DocumentBuilderFactory dFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dFactory.newDocumentBuilder();
Document doc;
doc=dBuilder.parse(new File("configTV.xml"));
//获取包含品牌名称的文本节点
NodeList nl=doc.getElementsByTagName("brandName");
Node classNode = nl.item(0).getFirstChild();
String brandName=classNode.getNodeValue().trim();
return brandName;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return null;
}
}
}
public class Client {//测试类
public static void main(String[] args) {
try {
TV tv;//抽象类型定义
//获取产品的品牌
String brandName=XMLUtilTV.getBrandName();
//获取具体的产品
tv=TVFactory.producedTV(brandName);
tv.play();
} catch (Exception e) {
// TODO: handle exception
}
}
}