设计模式-简单工厂模式

简单工厂模式

《一:普通简单工厂》

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值