一、介绍
工厂模式属于创建型模式,它的特点是 “对象的创建及使用分离”,用户不需要操心对象的创建。
简单工厂模式不是标准的设计模式,但是由于编码简单,所以日常使用较多。
二、类图分析
Api:一个接口类,只有operator()一个方法
ImplA与ImplB:Api接口类的实现类
ApiFactory:工厂类,通过传入的类型分别创建不同的Api类并返回
Client:使用类,通过调用ApiFactory类的createApi()方法拿到Api对象并使用。
优点:用户不需要关系对象的创建,使用简单
缺点:扩展困难,每次添加一个新的Api实现类都需要修改ApiFactory里的创建方法
三、代码实现
public interface Api {
void opterator();
}
public class ImplA implements Api{
@Override
public void opterator() {
System.out.println("ImplA opterator() called");
}
}
public class ImplB implements Api{
@Override
public void opterator() {
System.out.println("ImplB opterator() called");
}
}
public class ApiFactory {
public static Api create(int type){
switch (type){
case 1:
return new ImplA();
case 2:
return new ImplB();
default:
return new ImplA();
}
}
}
四、另一种实现
public class ApiFactory {
public static <T extends Api> T createApi(Class<T> clazz ){
Api api = null;
try {
api = (Api) Class.forName(clazz.getName()).newInstance();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return (T)api;
}
}
通过反射去创建对象并返回,扩展性更好,由于用到了反射,性能比第一种方式要差,但是编写后不需要再次修改。