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();

 


版权声明:本文为feipo_zhm原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。