水果接口:
package com.su.demo;
public interface Fruit {
void eat();
}
苹果类
package com.su.demo;
public class Apple implements Fruit{
@Override
public void eat() {
System.out.println("吃苹果");
}
}
工厂类
package com.su.demo;
public class Factory {
public static Fruit getInstance(String className){
if("apple".equals(className))
return new Apple();
return null;
}
}
测试类
package com.su.demo;
public class FactoryDemo {
public static void main(String[] args) {
Fruit f = Factory.getInstance("apple");
f.eat();
}
}
如果我现在再写一个橘子类实现水果接口,那想要通过工厂类创建一个橘子对象,就要修改工厂类。每次多写一个实现水果接口的类,对应的工厂类也要添加,就很麻烦。
通过反射机制就会很简单了。
package com.su.demo;
public 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;
}
}
package com.su.demo;
public class FactoryDemo {
public static void main(String[] args) {
Fruit fruit1 = Factory.getInstance("com.su.demo.Apple");
Fruit fruit2 = Factory.getInstance("com.su.demo.Orange");
fruit1.eat();
fruit2.eat();
}
}
在框架里,都是这样创建类的实例的。