简单工厂模式
简单工厂:使用工厂封装对象的创建过程,封装的对象应具备相同的行为。
步骤:
- 定义接口规范:此接口是工厂中创建出的对象必须实现的接口,而且创建出的对象必须实现接口中提供的方法。
- 定义实现类:是工厂需要创建的对象的模板,实现类要实现定义的接口。
- 构建工厂:工厂类是抽象类,工厂类中提供一个静态的方法,方法的返回值类型是接口类型,用于动态绑定工厂中产生的各种对象。
应用场景:根据用户的需求而产生不同的对象,而这些对象都是同一类型,而且都具有相同的行为。
作用:能够适应不同用户提出不同的需求,根据不同的需求产生不同的对象,同时屏蔽对象的创建过程。
简单工厂实例:
接口:
package com.csdn.biz; public interface UserBiz { public boolean login(String username,String password); }
接口实现类:package com.csdn.biz.impl; import com.csdn.biz.UserBiz; public class UserBizImpl implements UserBiz { public boolean login(String username, String password) { //此处省略逻辑处理 return false; } }
构建工厂:package com.csdn.factory; import com.csdn.biz.UserBiz; import com.csdn.biz.impl.UserBizImpl; /** * SimpleFactory:简单工厂 * @author Gansuper * @time 2014年5月11日 */ public abstract class SimpleFactory { public static UserBiz getUserBizImpl(String message){ if("UserBizImpl".equals(message)){ return new UserBizImpl(); } return null; } }
简单工厂与配置文件结合使用实例:
接口及接口实现类与上面一致。
创建配置文件factory.properties并书写响应的配置信息。
UserDaoImpl = com.hncu.dao.impl.UserDaoImpl UserBizImpl = com.hncu.biz.impl.UserBizImpl
工厂类:package com.hncu.factory; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * Faction:工厂类,用于读取配置文件信息实例化对象 * @author Gansuper * @time 2014年5月11日 * */ public class Factory { //创建一个Properties对象 private static Properties prop = new Properties(); //静态块 static { //获得配置文件信息 InputStream io = Factory.class.getResourceAsStream("factory.properties"); try { //加载配置信息 prop.load(io); } catch (IOException e) { e.printStackTrace(); } } /** * @功能:获得实例对象 * @param key * @return Object 创建的对象 * */ public static Object getInstance(String key) { //获得配置文件中key对应的配置信息 String className = prop.getProperty(key).trim(); Object obj=null; try { //通过反射获得类对象 Class<?> c=Class.forName(className); //实例化对象 obj=c.newInstance(); } catch (Exception e) { e.printStackTrace(); } //返回获得对象实例 return obj; } }