看例子
1.TV产品接口,负责播放public interface TV // TV接口{ public void play();}
2.TV工厂接口,负责生产产品
public interface TVFactory // TV接口工厂{ public TV produceTV();}
3.TV具体产品类,海尔,海信
public class HaierTV implements TV{ public void play() { System.out.println("海尔电视机播放中......"); }}
public class HisenseTV implements TV{ public void play() { System.out.println("海信电视机播放中......"); } }
4.TV具体工厂类
public class HaierTVFactory implements TVFactory{ public TV produceTV() { System.out.println("海尔电视机工厂生产海尔电视机。"); return new HaierTV(); }}
public class HisenseTVFactory implements TVFactory{ public TV produceTV() { System.out.println("海信电视机工厂生产海信电视机。"); return new HisenseTV(); }}
5.配置config.xml
HisenseTVFactory
6.读取配置文件类
import javax.xml.parsers.*; // 引入xmlimport org.w3c.dom.*; // 引入dom支持import org.xml.sax.SAXException;import java.io.*; // 引入io支持public class XMLUtil { //该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象 public static Object getBean() { try { //创建文档对象 DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = dFactory.newDocumentBuilder(); Document doc; doc = builder.parse(new File("./src/config.xml")); //获取包含类名的文本节点 NodeList nl = doc.getElementsByTagName("className"); Node classNode = nl.item(0).getFirstChild(); String cName = classNode.getNodeValue(); //通过类名生成实例对象并将其返回 Class c = Class.forName(cName); Object obj = c.newInstance(); return obj; } catch (Exception e) { e.printStackTrace(); return null; } }}
6.客户端
public class Client{ public static void main(String args[]) { try { TV tv; // 定义tv对象 TVFactory factory; // 定义工厂 factory=(TVFactory)XMLUtil.getBean(); // 强制转化,魔术处理 tv=factory.produceTV(); // 创建电视对象 tv.play(); // 播放电视 } catch(Exception e) { System.out.println(e.getMessage()); } }}
目录结构如下