工厂方法模式

工厂方法模式
      Factory Method
      工厂方法模式的意义在于定义一个创建产品对象的接口,将实际创建工作推迟到子类当中。好处:可以使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
       工厂方法模式是对简单工厂模式的衍生,解决了许多简单工厂模式的问题。首先,完全实现‘开-闭’原则,实现了可扩展。
        其次更复杂的层次结构,可以应用于产品结果复杂的场合。
工厂方法经常用在以下两种情况
        1、对于某个产品,调用者清楚地知道应该使用哪个具体工厂服务,实例化该具体的工厂,生产出具体的产品来。java Collection中的iterator方法即属于这种情况(多态中的动态调用);
         2、只是需要一个产品,而不想知道也不需要知道究竟是哪个工厂为生产的,即最终选用哪个具体工厂的决定权在生产者一方,它们根据当前系统的情况来实例化一个具体的工厂返回给使用者,而这个决策过程对于使用者来说是透明的。

 (即用抽象父类或接口的对象类型去执行各种操作)

 以Dao为例(java)

        

package factoryMethodModel;

import java.util.List;

//以dao来实例;
//dao可以用多种不同的实现
public interface Dao {
       //模拟情况下只写一种方法
	 List<User> findAll()throws Exception;
}

package factoryMethodModel;

import java.util.List;
//jdbc实现
public class JDBCDaoimpl implements Dao{

	
	public List<User> findAll() throws Exception {
		//TODO
		return null;
	}

}

package factoryMethodModel;

import java.util.List;
//xml 实现
public class XMLDaoimpl implements Dao{

	@Override
	public List<User> findAll() throws Exception {
		// TODO 
		return null;
	}

}

package factoryMethodModel;

//工厂类用于生成具体实现类
//不考虑单例的情况下---具体可继续关注后续博客
public class Factory {

	public static Object getInstance(String className) {
		Object obj = null;
		try {
			obj = Class.forName(className).newInstance();
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		return obj;
	}

}

package factoryMethodModel;

import java.util.List;

// 测试类
public class Client {

	public static void main(String[] args) throws Exception {
		Dao dao = (Dao) Factory.getInstance("factoryMethodModel.XMLDaoimpl");
		// 具体可用配置文件传递className
		List<User> users = dao.findAll();

	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值