Java设计模式之工厂模式(利用反射实现)
来源:互联网 发布:51单片机怎么烧程序 编辑:程序博客网 时间:2024/06/05 07:00
工厂模式是我们最常用的实例化对象的模式,使用工厂方法代替了new操作的一种模式。
从xml文件获取相应的实例的信息,获得带实例的代码:
package com.designmode;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.lang.reflect.Constructor;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;/** * Description: * 实现一个工厂模式 * * @author lee * */public class FactoryMode { /** * Description: * 主方法 * * */ public static void main(String[] args){ //通过getInstance()方法获取Person对象 Person p = (Person)getInstance(); System.out.println(p); } /** * Description: * 通过dom4j解析xml文件,获取对象信息。将其封装在一个对象内,返回。 * (关于运用dom4j解析xml文件,可以查看我的另外一篇博客) * * @return * */ public static Object getInstance(){ int id = 0; String name = ""; String className = ""; Object o = null; //xml解析器 SAXReader sax = new SAXReader(); try{ //获取一个文档实例 Document doc = sax.read(new FileInputStream("./people.xml")); //获取根元素,即是<person></person> Element element = doc.getRootElement(); //获取id和name的值,和Person类的全称 id = Integer.parseInt(element.elementText("id")); name = element.elementText("name"); className = element.elementText("class"); }catch(IOException | DocumentException e){ e.printStackTrace(); } try{ //通过Person类全称反射获取Class对象 Class<?> clazz = Class.forName(className); //通过Class对象获取Constructor对象 Constructor<?> constructor = clazz.getConstructor(); //同过Contructor对象获取相应的实例 o = constructor.newInstance(); //通过Class对象获取Field对象,并设置其值 Field Id = clazz.getField("id"); Id.set(o, id); Field Name = clazz.getField("name"); Name.set(o, name); }catch(Exception e){ e.printStackTrace(); } return o; }}/** * Description: * 实现一个人类 * * @author lee * */class Person{ public int id; public String name; /** * Description: * 默认构造方法 * * */ public Person(){} /** * Description: * 初始化id和name的构造方法 * * @param id id * @param name 名字 * */ public Person(int id, String name){ this.id=id; this.name=name; } /** * Description: * 重写toString方法 * * @return "id = "+id+", name = "+name * */ @Override public String toString(){ return "id = "+this.id+", name = "+this.name; } //get和set方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
people.xml的代码:
<person> <class>com.designmode.Person</class> <id>1</id> <name>wang</name></person>
0 0
- Java设计模式之工厂模式(利用反射实现)
- 利用反射实现工厂模式.
- Java实现设计模式之工厂模式
- 设计模式之反射+抽象工厂模式
- 设计模式之工厂模式与反射
- java反射实现工厂模式
- Java设计模式之工厂模式之简单工厂模式(通过反射)
- Java 反射之工厂模式
- 设计模式之工厂模式(java)
- Java之设计模式(工厂模式)
- 设计模式之工厂模式(Java)
- 利用反射机制实现工厂模式
- java设计模式之工厂设计模式(简单工厂设计模式、工厂设计模式、抽象设计模式)
- 反射--工厂设计模式
- JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式) (转)
- (转载)JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)
- Java设计模式之工厂模式(一):简单工厂模式+工厂方法模式
- 设计模式之—工厂方法模式(FactoryMethod)-Java实现
- Spring autowiring自动装配
- Thinking in Java 4th
- Java中的多线程(一)关于线程的基本操作
- lua面试题:热更新简介、原理及示例
- NIO中注册channel注册多个感兴趣事件-位运算符“或”的使用
- Java设计模式之工厂模式(利用反射实现)
- C++ 笔试题简单练习----求N 以内质数 和 计算多少对质数等于N
- 【unity3d-C#学习笔记】C#中常用的数据结构及遍历方法
- Linux环境下安装python3
- 虚拟机实现代码
- 表达式计算——by Java
- 简单的GCC语法: 弄清gcc test.c 与 gcc -c test.c 的差别
- Floyd Dijkstra Bellman-Ford spfa 四种最短路经典算法汇总 HDU 2544为例
- Java中CAS详解-待学习的任务