java通过反射机制实现工厂设计模式
2014-12-20 00:00
726 查看
原始设计模式:
package org.lxh.demo15.factorydemo01 ; interface Fruit{ public void eat() ; // 吃水果 } class Apple implements Fruit{ public void eat(){ // 覆写eat()方法 System.out.println("** 吃苹果"); } }; class Orange implements Fruit{ public void eat(){ System.out.println("** 吃橘子") ; } }; class Factory{ public static Fruit getInstance(String className){ Fruit fruit = null ; try{ fruit = (Fruit)Class.forName(className).newInstance() ; }catch(Exception e){ e.printStackTrace() ; } return fruit ; } }; public class FactoryDemo01{ public static void main(String args[]){ Fruit f = Factory.getInstance("org.lxh.demo15.factorydemo01.Apple") ; if(f!=null){ f.eat() ; } } };但是以上代码存在问题,因为每次增加实现类,都需要修改Factory类。所以我们需要用反射机制实现。
package org.lxh.demo15.factorydemo02 ; import java.util.Properties ; import java.io.File ; import java.io.FileOutputStream ; import java.io.FileInputStream ; interface Fruit{ public void eat() ; // 吃水果 } class Apple implements Fruit{ public void eat(){ // 覆写eat()方法 System.out.println("** 吃苹果"); } }; class Orange implements Fruit{ public void eat(){ System.out.println("** 吃橘子") ; } }; class Init{ public static Properties getPro(){ Properties pro = new Properties() ; File f = new File("d:\\fruit.properties") ; // 找到属性文件 try{ if(f.exists()){ // 文件存在 pro.load(new FileInputStream(f)) ; // 读取属性 }else{ pro.setProperty("apple","org.lxh.demo15.factorydemo02.Apple") ; pro.setProperty("orange","org.lxh.demo15.factorydemo02.Orange") ; pro.store(new FileOutputStream(f),"FRUIT CLASS") ; } }catch(Exception e){} return pro ; } }; class Factory{ public static Fruit getInstance(String className){ Fruit fruit = null ; try{ fruit = (Fruit)Class.forName(className).newInstance() ; }catch(Exception e){ e.printStackTrace() ; } return fruit ; } }; public class FactoryDemo02{ public static void main(String args[]){ Properties pro = Init.getPro() ; Fruit f = Factory.getInstance(pro.getProperty("apple")) ; if(f!=null){ f.eat() ; } } };通过配置和程序分离理念实现。 参考: [1].mldn视频
相关文章推荐
- 利用反射机制实现工厂设计模式的高扩展性
- 模拟实现Struts拦截器-蕴含着代理模式,AOP,工厂模式,依赖注入,Java 反射,动态构造等机制
- java中的反射三(反射机制深入---工厂设计模式)
- 15. JAVA 反射机制 Part 2(动态代理、类的生命周期、工厂设计模式) ----- 学习笔记
- java内省机制与反射实现工厂模式
- Java设计模式之工厂模式(利用反射实现)
- 利用反射机制实现工厂设计模式的高扩展性
- [零基础学JAVA]Java SE应用部分-36.反射机制与工厂设计模式 推荐
- Java设计模式之工厂模式之简单工厂模式(通过反射)
- C#用工厂模式、反射机制和缓存机制来设计数据访问层的接口
- 设计模式之1.1 再谈反射 以及java当中通过配置文件得到类名字,并生成对象的方法
- 用工厂模式、反射机制和缓存机制来设计数据访问层的接口
- java反射实现工厂模式
- 设计模式:浅析 抽象工厂、工厂方法、简单(静态)工厂 java实现
- 设计模式实践-反射到所有接口实现类实践工厂方法,页面中有大量计算数据时设计实践
- java中的设计模式(二)--工厂方法模式 反射机制
- 设计模式——用Java实现工厂模式
- 设计模式之—简单工厂方法(StaticFactory )-Java实现
- [转] Java的反射机制+工厂模式
- java23种设计模式之工厂模式(Factory)的实现