JAVA設計模式之【工廠方法模式】


看例子
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

<?xml version="1.0"?>
<config>
	<className>HisenseTVFactory</className>
</config>

6.讀取配置文件類

import javax.xml.parsers.*; // 引入xml

import 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());
         }
	}
}

目錄結構如下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM