标签:att tor 它的 优缺点 一句话 work bst eve 获取信息
先抛出两个概念,反射机制和简单工厂模式。
反射机制就是由参数(包名类名的字符串),获取具体类的属性方法。简单工程模式就是由一个类作公共出口来生成其他类的实例,父类子类生成模式的简单应用,可以由参数来决定具体需要的实例。往下看,是我搜到的解释,相对完善一点。
package com.java.factory; /** * 接口 Fruit * */ public interface Fruit { public abstract void eat(); }
然后是接口的两个实现,Apple和Orange
package com.java.factory; public class Apple implements Fruit { @Override public void eat() { System.out.println("I‘m eating APPLE"); } }
package com.java.factory; public class Orange implements Fruit { @Override public void eat() { System.out.println("I‘m eating ORANGE"); } }
都是比较简单的代码。接口以及接口的实现类都有了之后,就需要构造工厂类了。
package com.java.factory; public 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; } public static Fruit getInstanceFunc(String className) { Fruit f=null; if(className.equals("Apple")) { f = new Apple(); } else if(className.equals("Orange")) { f = new Orange(); } /* 添加一个Fruit接口的实现,就要在这里添加一个条件判断 */ return f; } }
工厂类写了两个函数,主要是用来对比使用反射机制和不使用反射机制上,代码的构成是怎样。其中这一局代码:
Class.forName(className).newInstance()
也就是反射机制的具体应用。如果不使用反射机制,像在getInstanceFunc方法里面,每次新增一个Fruit的实现类,都需要修改工厂类代码。没有对比就没有伤害,相比之下应用反射机制的getInstance方法就要灵活许多。
那么,测试一下。
package com.java.factory; public class Main { public static void main(String[] s) { System.out.println("-------init Apple-------"); Fruit fApple = Factory.getInstance("com.java.factory.Apple"); if(fApple!=null) { fApple.eat(); } System.out.println("-------init Orange-------"); Fruit fOrange = Factory.getInstance("com.java.factory.Orange"); if(fOrange!=null) { fOrange.eat(); } } }
测试代码没什么好说的,看一下结果:
-------init Apple------- I‘m eating APPLE -------init Orange------- I‘m eating ORANGE
反射机制的主要优点就是他的灵活性,那么其实反射机制也有它的缺点,主要是两方面:
其一是对性能会有影响。反射机制生成对象有一个内部的程序解释过程,比直接new一个对象要慢,这也是应用的时候需要考虑的。
其二是反射机制会模糊程序内部实际会发生的事情。
贴一下工厂模式的优缺点,我也没理解透彻,在后面的项目中再慢慢理解:
标签:att tor 它的 优缺点 一句话 work bst eve 获取信息
原文地址:http://www.cnblogs.com/tuofan/p/6902974.html