java 反射解析,将反射用于工厂模式【实例】
来源:互联网 发布:英语造句软件下载 编辑:程序博客网 时间:2024/05/23 07:24
interface
fruit{
public
abstract
void
eat();
}
class
Apple
implements
fruit{
public
void
eat(){
System.out.println(
"Apple"
);
}
}
class
Orange
implements
fruit{
public
void
eat(){
System.out.println(
"Orange"
);
}
}
// 构造工厂类
// 也就是说以后如果我们在添加其他的实例的时候只需要修改工厂类就行了
class
Factory{
public
static
fruit getInstance(String fruitName){
fruit f=
null
;
if
(
"Apple"
.equals(fruitName)){
f=
new
Apple();
}
if
(
"Orange"
.equals(fruitName)){
f=
new
Orange();
}
return
f;
}
}
class
hello{
public
static
void
main(String[] a){
fruit f=Factory.getInstance(
"Orange"
);
f.eat();
}
}
这样,当我们在添加一个子类的时候,就需要修改工厂类了。如果我们添加太多的子类的时候,改的就会很多。
现在我们看看利用反射机制:
package
Reflect;
interface
fruit{
public
abstract
void
eat();
}
class
Apple
implements
fruit{
public
void
eat(){
System.out.println(
"Apple"
);
}
}
class
Orange
implements
fruit{
public
void
eat(){
System.out.println(
"Orange"
);
}
}
class
Factory{
public
static
fruit getInstance(String ClassName){
fruit f=
null
;
try
{
f=(fruit)Class.forName(ClassName).newInstance();
}
catch
(Exception e) {
e.printStackTrace();
}
return
f;
}
}
class
hello{
public
static
void
main(String[] a){
fruit f=Factory.getInstance(
"Reflect.Apple"
);
if
(f!=
null
){
f.eat();
}
}
}
上面的代码虽然可以通过反射取得接口的实例,但是需要传入完整的包和类名。而且用户也无法知道一个接口有多少个可以使用的子类,所以我们通过属性文件的形式配置所需要的子类。
下面我们来看看: 结合属性文件的工厂模式
首先创建一个fruit.properties的资源文件,
内容为:
apple=Reflect.Apple
orange=Reflect.Orange
package
Reflect;
import
java.io.*;
import
java.util.*;
interface
fruit{
public
abstract
void
eat();
}
class
Apple
implements
fruit{
public
void
eat(){
System.out.println(
"Apple"
);
}
}
class
Orange
implements
fruit{
public
void
eat(){
System.out.println(
"Orange"
);
}
}
//操作属性文件类
class
init{
public
static
Properties getPro()
throws
FileNotFoundException, IOException{
Properties pro=
new
Properties();
File f=
new
File(
"fruit.properties"
);
if
(f.exists()){
pro.load(
new
FileInputStream(f));
}
else
{
pro.setProperty(
"apple"
,
"Reflect.Apple"
);
pro.setProperty(
"orange"
,
"Reflect.Orange"
);
pro.store(
new
FileOutputStream(f),
"FRUIT CLASS"
);
}
return
pro;
}
}
class
Factory{
public
static
fruit getInstance(String ClassName){
fruit f=
null
;
try
{
f=(fruit)Class.forName(ClassName).newInstance();
}
catch
(Exception e) {
e.printStackTrace();
}
return
f;
}
}
class
hello{
public
static
void
main(String[] a)
throws
FileNotFoundException, IOException{
Properties pro=init.getPro();
fruit f=Factory.getInstance(pro.getProperty(
"apple"
));
if
(f!=
null
){
f.eat();
}
}
}
0 0
- java 反射解析,将反射用于工厂模式【实例】
- 将反射用于工厂模式
- 将反射用于工厂模式
- 将反射用于工厂模式
- 【Java高级】反射+工厂模式+属性文件的实例应用
- java反射实现工厂模式
- java反射应用于工厂模式
- Java反射和工厂模式
- Java 反射与工厂模式
- Java 反射之工厂模式
- 将反射应用在工厂模式上
- Java反射实例 自己用于记录
- java反射机制实例解析
- java反射机制实例解析
- Java反射 配置文件 工厂方法综合实例
- java中的反射三(反射机制深入---工厂设计模式)
- Java反射机制-使用反射实现工厂模式
- [转] Java的反射机制+工厂模式
- HTML:transition属性学习
- Windows7下,完全、彻底卸载Oracle
- PAT 1024. Palindromic Number (25)(字符串对称,相加)
- linux中PCI总线驱动
- 21个优质Swift开源App
- java 反射解析,将反射用于工厂模式【实例】
- 团队的建设与管理-献给每一位奋斗的同事
- 统计字符数
- JAVA SortedSet的坑
- 大数据分析之聚类算法
- Lightoj1216——Juice in the Glass (计算几何)
- crontab执行后邮件发到指定邮箱
- cocoa 框架参考
- Sys和system用户的区别,as normal、sysdba 和sysoper系统权限区别