强烈推荐一个大神的人工智能的教程:http://www.captainai.net/zhanghan
简述 |
反射 |
##使用简单工厂,未使用反射时:
1.创建fruit接口:
public interface fruit {
public abstract void eat();
}
2.创建Apple类实现fruit接口
public class Apple implements fruit{
public void eat() {
System.out.println("Apple");
}
}
3.创建Orange类实现接口
public class Orange implements fruit {
public void eat() {
System.out.println("Orange");
}
}
4.创建工厂类
public 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;
}
}
5.新建一个测试类,获取Apple对象
public class hello {
public static void main(String[] a){
fruit f=Factory.getInstance("Apple");
f.eat();
}
}
该种方法的缺点:当新添加一种水果类时,需要修改工厂方法添加一种逻辑,扩展性和了灵活性不强。
##使用简单工厂+反射
1.将工厂方法修改为
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;
}
}
2.修改测试类:
public class hello {
public static void main(String[] a){
fruit f=Factory.getInstance("zh.spring.ioc.Apple");
f.eat();
}
}
这种情况下,可灵活的添加一种水果类,缺点是需要开发人员使用时记清楚全路径,因此可以借助配置文件定义全路径对应的别名,利用开发使用。
总结 |