简单工厂模式
《一:普通简单工厂》
建立一个工厂类,对实现了同一接口的一些类进行实例的创建,例:
//迷你版
public class sendFactory{
public sender product(String type){
if("mail".equals(type) ){
return new MailSender();
}else if("sms".equals(type){
return new SmsSender(type);
}
}
}
//加强版,在DAO操作中常用
package cn.itcast.cd.oa.factory;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import cn.itcast.cd.oa.utils.CommUtils;
/**
* dao的工厂函数
*/
@SuppressWarnings("all")
public class DaoFactory {
//dao缓存
private static Map<String, Object> daoMap = new HashMap();
private DaoFactory() {
}
//获取工厂类实例
public static DaoFactory newInstance() {
return new DaoFactory();
}
/**
* 1.判断缓存中是否存在dao
* 1.1 存在: 直接取出返回
* 1.2 不存在
* 2.1:得到属性文件对象
* 2.2:得到dao名称
* 2.3:通过反射创建dao对象并放入缓存
* 1.3:从缓存中取出dao并返回.
*/
//根据传进去的类的类型决定返回时什么类型对象,解耦合
public <T> T getDao(String daoName, Class<T> requiredType) {
Properties p = null;
try {
if(!daoMap.containsKey(daoName) ){
p = CommUtils.newInstance().getProperties();
String className = p.getProperty(daoName);
T obj = (T) Class.forName(className).newInstance();
if(!requiredType.isInstance(obj) ){
throw new RuntimeException(obj + "的类型不是" + requiredType);
}
daoMap.put(daoName, obj);
}
return (T) daoMap.get(daoName);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
《多个方法的简单工厂》
例:
public class sendFactory{
public sender produceMail(){
return new MailSender();
}
public sender produceSms(){
return new SmsSender();
}
}
《多个静态方法的简单工厂》
将多个方法的简单工厂改成是static,此时直接调用方法无需实例化对象。