提供创建对象的功能,不需要管具体的实现。好处:降低客户端与模块之间的耦合度
下面通过一个简单的例子来讲解什么是简单工厂
//这是一个功能接口
public interface Api {
void operator();
}
//ImplA,ImplB,ImplC是这个功能的实现类
public class ImplA implements Api {
@Override
public void operator() {
System.out.println("ImplA.operator");
}
}
现在需要根据不同情况来实现不同的功能,为了方便我们可以封装第一个工厂类来生产响应的功能
public class ApiFactory {
//通过new一个实例化对象来返回所需要的功能,这种方法在安卓源码中应用的非常多
public static Api create(int type) {
switch (type) {
case 1:
return new ImplA();
case 2:
return new ImplB();
case 3:
return new ImplC();
default:
return new ImplA();
}
}
//通过全类名来反射获取对应的对象,这种方法在在安卓中很少见,反而在javaEE中从配置文件加载类中用的特别多
public static <T extends Api> T create(Class<T> clz){
Api api = null;
try {
api = (Api) Class.forName(clz.getName()).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return (T) api;
}
}