单例和工厂设计模式入门小案例

案例背景:
当我们使用mvc模式开发的时候,在数据访问层(dao层),当dao的接口有多个实现的时候,如果service层调用的时候,这时候我们要去修改service层的代码来达到调用不同的dao实现类。为了尽量的不修改代码,就能达到上述目的,我们这个时候就可以将dao的实现交给一个工厂来完成,最终达到切换dao的实现,不需要修改任何代码的目的,下面的代码小案例就是这个思想的具体实现,欢迎查看!
通过这个小案例的学习,其实Spring的底层就是这样对三层架构之间进行解耦的,spring主要是写配置文件。

package cn.itcast.util;
/**
 * 创建dao具体实例的工厂
 * @author liuxiaoju
 *
 */

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import cn.itcast.dao.UserDao;

public class DaoFactory {
    /* 为了解决在service调用时,如果dao的实例变化了
     * 还需要修改service层调用的代码,为了更好的解耦
     * service层和dao层,我们需要设计这个工厂类来完成解耦的关系
     * */
    //采用单例模式,让这个对象只在内存中存在一个,至于类该怎么描述就怎么描述,想使用单例的话,加上下面注释的1,2,3内容即可!
    //1,在类自己的内部创建本类对象
    private static DaoFactory instance=new DaoFactory();
    //2,将构造函数私有化,为的是不让除本类以外new对象
    private DaoFactory() {}
    //3,提供一个静态的方法给外部调用
    public static DaoFactory getInstance() {
        return instance;
    }
    //从配置文件中读取dao实现类的字符串
    private static String  daoImplClassName;
    static {

        try {
            InputStream in=DaoFactory.class.getClassLoader().getResourceAsStream("dao.properties");
            Properties properties=new Properties();
            properties.load(in);
            daoImplClassName=properties.getProperty("userDao");
        } catch (IOException e) {
            throw new RuntimeException();
        }
    }

    public UserDao getUserDao() {
        try {
            return (UserDao)Class.forName(daoImplClassName).newInstance();
        } catch (Exception e) {
            throw new RuntimeException();
        }

    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值