java中利用工厂factory创建对象,进行解耦,降低程序之间的耦合性

 

第一步:创建一个objs.properties文件用于存放文件

userDao=com.itany.shopping.dao.impl.UserDaoImpl
itemDao=com.itany.shopping.dao.impl.ItemDaoImpl
orderDao=com.itany.shopping.dao.impl.OrderDaoImpl

 

第二步:创建一个对象工厂,利用静态代码块,通过类名反射加载需要创建的对象


/**
 * 
 * 创建对象的工厂类
 * 
 * 根据类路径下的objs.properties属性文件中的配置来创建对象
 * 要求:
 * 1.文件中不能有空行
 * 2.注意编写顺序,由于对象间可能存在依赖关系,被依赖的对象必须放在依赖对象的前面
 */
public class ObjectFactory {

	/*
	 * 定义一个Map集合,用来存储对象
	 */
	private static Map<String, Object> objs = new HashMap<>();

	/*
	 * 类加载时读取属性文件,创建相应对象,对象是单例的
	 */
	static {
		try (BufferedReader reader = new BufferedReader(new InputStreamReader(
				ObjectFactory.class.getClassLoader().getResourceAsStream(
						"objs.properties")));) {
			String line = null;
			while ((line = reader.readLine()) != null) {
				String[] entry = line.split("=");
				objs.put(entry[0], Class.forName(entry[1]).newInstance());
			}
		} catch (Exception e) {
			throw new ExceptionInInitializerError("ObjectFactory初始化失败:" + e);
		}
	}

	/*
	 * 工厂方法,用来获取对象
	 */
	public static Object getObject(String key) {
		return objs.get(key);
	}

}

第三步:就是利用factory进行创建对象,而不是利用new来创建对象。

import java.util.List;

import com.itany.shopping.dao.ItemDao;
import com.itany.shopping.entity.Item;
import com.itany.shopping.factory.ObjectFactory;
import com.itany.shopping.service.ItemService;

public class ItemServiceImpl implements ItemService {

	private ItemDao itemDao=(ItemDao) ObjectFactory.getObject("itemDao");
	
	@Override
	public List<Item> findByOrderId(int orderId,int userId) {
		return itemDao.selectByOrderId(orderId,userId);
	}

}

使用以上工厂可以直接调用到bean,只需要

private ItemDao itemDao=(ItemDao) ObjectFactory.getObject("itemDao");
	

即可!

如果通过正常的创建对象方法则需要通过new来实现创建对象,这就会增加层与层之间的耦合性。

ItemDao itemDao=new ItemDaoImpl();

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逼哥很疯狂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值