zoukankan      html  css  js  c++  java
  • 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());
             }
    	}
    }
    
    

    目录结构如下

  • 相关阅读:
    System.Configuration引用后ConfigurationManager方法用不了
    HTTP 错误 500.23
    slide ——首尾相接の平滑切换效果
    函数式编程初探之回调
    Call & Apply. It's easy!
    【W3C】 CSS3选择器
    再谈原型和原型链
    ECMA学习小结(3)——constructor 和 prototype
    ECMA学习小结(2)——一切皆对象
    ECMA学习小结(1)——什么是ECMAScript,JAVAScript与ECMA的关系
  • 原文地址:https://www.cnblogs.com/jiqing9006/p/5907130.html
Copyright © 2011-2022 走看看