博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA设计模式之【工厂方法模式】
阅读量:5056 次
发布时间:2019-06-12

本文共 2210 字,大约阅读时间需要 7 分钟。

422101-20160925214305538-992199557.png

看例子

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

目录结构如下

422101-20160925215123980-482402585.png

转载于:https://www.cnblogs.com/jiqing9006/p/5907130.html

你可能感兴趣的文章
ES6内置方法find 和 filter的区别在哪
查看>>
Android入门之文件系统操作(二)文件操作相关指令
查看>>
Android实现 ScrollView + ListView无滚动条滚动
查看>>
Swift 中的指针使用
查看>>
Swift - 使用闭包筛选过滤数据元素
查看>>
alue of type java.lang.String cannot be converted to JSONObject
查看>>
搜索引擎选择: Elasticsearch与Solr
查看>>
JAVA设计模式之简单工厂模式与工厂方法模式
查看>>
③面向对象程序设计——封装
查看>>
【19】AngularJS 应用
查看>>
Spring
查看>>
Linux 系统的/var目录
查看>>
Redis学习---Redis操作之其他操作
查看>>
WebService中的DataSet序列化使用
查看>>
BZOJ 1200 木梳
查看>>
【Linux】【C语言】菜鸟学习日志(一) 一步一步学习在Linxu下测试程序的运行时间...
查看>>
SpringBoot使用其他的Servlet容器
查看>>
关于cookie存取中文乱码问题
查看>>
mysql 多表管理修改
查看>>
group by order by
查看>>