工厂方法模式是简单工厂模式的进一步抽象和推广,包含如下角色:
1、抽象产品(Product)
2、具体产品(ContreteProduct)
3、抽象工厂(Factory)
4、具体工厂(ConcreteFactory)
实例代码:
//抽象产品类
public interface TV {
public void play();
}//具体产品类
public class HisenseTV implements TV{
public void play(){
System.out.println("海信电视机播放中。。。。。。。。");
}
}
//具体产品类
public class HaierTV implements TV{
@Override
public void play() {
System.out.println("海尔电视机播放中。。。。。。。。。。");
}
}
//具体工厂类
public class HaierFactory implements TVFactory{
public TV produced(){
System.out.println("海尔电视机工厂生产海尔电视机。");
return new HaierTV();
}
}//具体工厂类
public class HisenseTVFactory implements TVFactory{
@Override
public TV produced() {
System.out.println("海信电视机厂生产海信电视机。");
return new HisenseTV();
}
}
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 Object getBean(){
try {
//创建文档对象
DocumentBuilderFactory dFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dFactory.newDocumentBuilder();
Document doc;
doc=dBuilder.parse(new File("configTV.xml"));
//获取包含品牌名称的文本节点
NodeList nl=doc.getElementsByTagName("className");
Node classNode = nl.item(0).getFirstChild();
String cName=classNode.getNodeValue().trim();
//通过类名生成实例对象将其返回
Class c=Class.forName(cName);
Object obj=c.newInstance();
return obj;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return null;
}
}
}
public class Client {
public static void main(String[] args) {
try {
TV tv;//抽象类型定义
//获取抽象工厂
TVFactory factory;
//获取具体的产品工厂
factory=(TVFactory) XMLUtilTV.getBean();
//获取具体的产品
tv=factory.produced();
tv.play();
} catch (Exception e) {
// TODO: handle exception
}
}
}
原文:http://blog.csdn.net/cow__sky/article/details/20798225