设计模式-简单工厂模式

来源:互联网 发布:nodetype js 编辑:程序博客网 时间:2024/06/05 15:37

简单工厂模式

《一:普通简单工厂》

建立一个工厂类,对实现了同一接口的一些类进行实例的创建,例:

//迷你版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,此时直接调用方法无需实例化对象。

原创粉丝点击