学习反射机制 - 工厂模式
2015-02-26 15:17
260 查看
初学反射机制,看到网上有一篇文章关于java反射详解,链接为java反射详解-博客园
自己动手敲一遍代码,增强记忆。
首先介绍下反射机制:简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字(还得有包名), 那么就可以通过反射机制来获得类的所有信息。
其次回顾一下工厂模式,大体情况如下:
抽象类 - Person:
package imeng.reflect.business;
/**
* 工厂模式的接口
* @author IMeng
*/
public interface Person {
public abstract void sex();
}
实现类 - Man:
/**
* 实现Person类
* @author IMeng
*/
public class Man implements Person {
@Override
public void sex() {
System.out.println("Man");
}
}
实现类 - Woman:
/**
* 实现Person类
* @author IMeng
*/
public class Woman implements Person {
@Override
public void sex() {
System.out.println("Woman");
}
}
工厂类 :
package imeng.reflect.controller;
import imeng.reflect.business.*;
/**
* 传统工厂模式,如果需要再添加子类,就需要再增加判断,子类越多,改的就越多
* @author IMeng
*/
public class Factory {
public static Person getInstance(String personType){
if("woman".equals(personType)){
return new Woman();
}else if("man".equals(personType)){
return new Man();
}else{
return null;
}
}
}
使用反射机制的工厂类 :
package imeng.reflect.controller;
import imeng.reflect.business.Person;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
/**
* 利用反射机制,配置文件的工厂模式
* @author IMeng
*/
public class ReflectFactory {
/**
* 获取配置文件,如果不存在会自动生成
* @return
* @throws FileNotFoundException
* @throws IOException
*/
public static Properties getPro() throws FileNotFoundException, IOException {
Properties pro = new Properties();
String fileName = "person.properties";
File file = new File( fileName );
if (file.exists()) {
pro.load(new FileInputStream(file));
} else {
System.out.println("配置文件不存在,配置文件为:"+ fileName);
}
return pro;
}
/**
* 工厂模式改造
* 如果有新的子类需要添加,只要在配置文件中增加就可以了。
* @param className
* @return
*/
public static Person getInstance(String className){
Person person = null;
try{
person = (Person)Class.forName(className).newInstance();
}catch(Exception e){
e.printStackTrace();
}
return person;
}
}<em>
</em>源码下载地址:百度云盘
自己动手敲一遍代码,增强记忆。
首先介绍下反射机制:简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字(还得有包名), 那么就可以通过反射机制来获得类的所有信息。
其次回顾一下工厂模式,大体情况如下:
抽象类 - Person:
package imeng.reflect.business;
/**
* 工厂模式的接口
* @author IMeng
*/
public interface Person {
public abstract void sex();
}
实现类 - Man:
/**
* 实现Person类
* @author IMeng
*/
public class Man implements Person {
@Override
public void sex() {
System.out.println("Man");
}
}
实现类 - Woman:
/**
* 实现Person类
* @author IMeng
*/
public class Woman implements Person {
@Override
public void sex() {
System.out.println("Woman");
}
}
工厂类 :
package imeng.reflect.controller;
import imeng.reflect.business.*;
/**
* 传统工厂模式,如果需要再添加子类,就需要再增加判断,子类越多,改的就越多
* @author IMeng
*/
public class Factory {
public static Person getInstance(String personType){
if("woman".equals(personType)){
return new Woman();
}else if("man".equals(personType)){
return new Man();
}else{
return null;
}
}
}
使用反射机制的工厂类 :
package imeng.reflect.controller;
import imeng.reflect.business.Person;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;
/**
* 利用反射机制,配置文件的工厂模式
* @author IMeng
*/
public class ReflectFactory {
/**
* 获取配置文件,如果不存在会自动生成
* @return
* @throws FileNotFoundException
* @throws IOException
*/
public static Properties getPro() throws FileNotFoundException, IOException {
Properties pro = new Properties();
String fileName = "person.properties";
File file = new File( fileName );
if (file.exists()) {
pro.load(new FileInputStream(file));
} else {
System.out.println("配置文件不存在,配置文件为:"+ fileName);
}
return pro;
}
/**
* 工厂模式改造
* 如果有新的子类需要添加,只要在配置文件中增加就可以了。
* @param className
* @return
*/
public static Person getInstance(String className){
Person person = null;
try{
person = (Person)Class.forName(className).newInstance();
}catch(Exception e){
e.printStackTrace();
}
return person;
}
}<em>
</em>源码下载地址:百度云盘
相关文章推荐
- 自己在项目中的学习总结:利用工厂模式+反射机制+缓存机制,实现动态创建不同的数据层对象接口
- headFirst学习13.简单工厂模式与OC反射机制
- 15. JAVA 反射机制 Part 2(动态代理、类的生命周期、工厂设计模式) ----- 学习笔记
- 简单工厂模式与反射机制(原创)
- 模拟实现Struts拦截器-蕴含着代理模式,AOP,工厂模式,依赖注入,Java 反射,动态构造等机制
- Java学习笔记----工厂模式和反射
- 利用反射机制实现工厂模式
- 在工厂模式里面利用反射机制动态调用对象方法
- Java 文件反射机制 工厂模式
- 基于C#反射机制的工厂模式
- 设计模式学习之简单工厂+反射+配置文件
- java内省机制与反射实现工厂模式
- 利用反射机制实现工厂设计模式的高扩展性
- java中的反射三(反射机制深入---工厂设计模式)
- 反射机制和工厂设计模式的使用
- C#用工厂模式、反射机制和缓存机制来设计数据访问层的接口
- C#用工厂模式、反射机制和缓存机制来设计数据访问层的接口总结
- java工厂模式的学习,与反射机制相、外部配置相结合
- [Java 15 反射机制 ] 工厂模式与 properties 读取配置文件
- Java工厂模式与反射机制、外部配置相结合