JAVA设计模式之【工厂方法模式】
2023-09-27 14:24:31 时间
看例子
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());
}
}
}
目录结构如下
相关文章
- Java高并发核心编程(卷2):多线程、锁、JMM、JUC、高并发设计模式
- Java NIO.2 Files类的常用方法
- java 程序语言中的LinkedList 集合基本方法演示
- JAVA-String 中删除指定字符(11种方法)
- HandlerSocket client for java——hs4j正式发布0.1版本
- [转]java.lang.OutOfMemoryError: PermGen space及其解决方法
- 几种任务调度的 Java 实现方法与比较
- 2022最新Java面试宝典(史上最全,BAT大厂面试必备,用心看完该篇就够了,建议先关注点赞加收藏)
- 设计模式java——模板方法模式
- Java并发——Executor框架详解(转)
- 将Java程序作成exe文件的几种方法【转载】
- 【HarmonyOS】【JAVA UI】 鸿蒙 Webview怎么设置cookie和读取cookie
- Java/JSP/JS Debug笔记
- 《Java编码指南:编写安全可靠程序的75条建议》—— 指南18:不要将使用降低安全性检查的方法暴露给不可信代码
- Java操作系统硬件的方法Unsafe
- Java中的hashcode方法
- Java配置环境变量、方法和原因
- 八种排序算法原理及Java实现
- Java项目打war包的方法
- 分析轮子(八)- List.java 各种遍历方式及遍历时移除元素的方法
- Java多线程之Join方法阻塞线程
- Java设计模式之行为型:模板方法模式
- JAVA堆、栈、方法区、StringBuffer与String的区别
- Java实例---简单的上课管理系统
- Java学习---面向对象的远程方法调用[RMI]
- Java实现简易版的【图书管理系统】
- 人工智能百度AI:语音识别java类-Array-专题视频课程
- Java小白入门200例73之Java注释的使用(类、方法、属性)
- Java小白入门200例77之Java方法的可变参数
- Java CyclicBarrier