利用反射实例化对象:
要想实例化类对象,最直观做法是使用关键字new。但是从优秀的软件设计框架来讲,new是不应该使用的,因为所有的开发不能够与具体的类型耦合在一起。
传统对象的实例化操作
Dept dept = new Dept();
使用反射完成对象的实例化
Class<?> cls = Class.forName("cn.mldn.vo.Dept");
Object obj = cls.newInstance();
两种对象的实例化操作的区别
在面向对象的设计过程中一定要避免耦合操作
在整个开发过程中,如果自己定义了一个接口,要想取得该接口的对象,首先要考虑使用工厂设计模式。
Fruit apple = new Apple(); //是不可取的
正确方法是定义一个工厂类
class Fatory{
public staic Fruit getInstance(String className){
if("Apple".equals(className)){
return new Apple();
}else if("pear".equals(className)){
return new Pear();
}else{
return null;
}
}
}
//获取Apple的实例化对象
public class TestDemo {
public static void main(String[] args){
Fruit f = factory.getInstance("Apple");
f.eat();
}
}
以上方法只是一个简单工厂类,如果增加了子类,工厂类也需要发生改变。代码量大时,可能顾不上工厂类的编写。
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;
}
}
以上工厂设计模式最大的好处在于
即使程序开发的时候类不存在,也不出现语法错误
工厂类可以在扩充子类的时候保持统一风格不做改变
缺点在于实例化对象时只能调用无参构造