此实例是 彩票 项目的一部分。有利于消化工厂模式。
1.
package com.ithm.lotteryhm28.engine;
/**
* 用户相关的业务操作的接口
* @author Administrator
*
*/
public interface UserEngine {
/**
* 用户登录
* @param user
* @return
*/
Message login(User user);
/**
* 获取用户余额
* @param user
* @return
*/
Message getBalance(User user);
/**
* 用户投注
* @param user
* @return
*/
Message bet(User user);
}
2.
package com.ithm.lotteryhm28.engine.impl;
public class UserEngineImpl implements UserEngine {
/**
* 用户登录
*
* @param user
*/
public Message login(User user) {
.............
}
@Override
public Message getBalance(User user) {
.............
}
@Override
public Message bet(User user) {
.............
}
}
3.在src目录下创建工厂配置文件 bean.properties。
UserEngine=com.ithm.lotteryhm28.engine.impl.UserEngineImpl
CommonInfoEngine=com.ithm.lotteryhm28.engine.impl.CommonInfoEngineImpl
4.
package com.ithm.lotteryhm28.util;
import java.io.IOException;
import java.util.Properties;
import com.ithm.lotteryhm28.engine.UserEngine;
/**
* 工厂类
* @author Administrator
*
*/
public class BeanFactory {
// 依据配置文件加载实例
private static Properties properties;
static{
properties=new Properties();
// bean.properties必须在src的跟目录下
try {
properties.load(BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties"));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 加载需要的实现类
* @param clazz
* @return
*/
public static<T> T getImpl(Class<T> clazz)
{
String key=clazz.getSimpleName();//clazz.getName()
String className = properties.getProperty(key);
try {
return (T) Class.forName(className).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
5.
CommonInfoEngine engine = BeanFactory.getImpl(CommonInfoEngine.class);