简单工厂模式,又称静态工厂方法,是一种创建型模式,直白点说就是
通过一个静态方法创建某一类产品,而要创建的是哪个具体产品又参数说了算。看类图:
这里以我们常用的dao为例,系统中的具体dao类都是实现IBaseDao接口的一类产品,再看简单工厂的实现代码:
public class Creator
{
public enum DaoEnum{shopdao,departdao,orderdao}; //假设现有的dao类有这几个,这里我们用枚举而不是字符串表示
//静态工厂方法
public static IBaseDao factory(DaoEnum daoEnum){
IBaseDao dao;
switch (daoEnum)
{
case shopdao:
dao=new ShopDaoImpl();
break;
case departdao:
dao=new DepartDaoImpl();
break;
default:
dao=null;
break;
}
return dao;
}
}
//调用代码:IBaseDao dao=Creator.factory(DaoEnum.departdao);
是不是非常简单,不用解释太多。它的优点是客户端调用类可以避免直接创建产品对象,把责任分割开来了。如果一个对象在new之前要获取其他数据,那我们也可以在这里执行。
那我们能不能实现一个可以生产任何产品的工厂方法呢?答案是肯定的,别忘了我们还有反射呢。
public static <T> T facotry(Class<T> clazz)
{
try
{
if(clazz==null)return null;
return clazz.newInstance();
} catch (InstantiationException e)
{
return null;
} catch (IllegalAccessException e)
{
return null;
}
}
以上代码段方法使用反射实现了,传什么生产什么,不过似乎缺少点抽象层的东西了。