工厂模式定义:实例化对象,用工厂方法代替new操作。
比喻:
你想吃馒头了,这时你只要打个电话给做馒头的工厂,这个馒头相当于一个接口,工厂就会根据做馒头的秘方(properties文件)给你做好馒头,然后送给你(实现接口)
1 。馒头工厂类:
import java.io.IOException;
import java.util.Properties;
/**
* 业务工厂
* 利用工厂模式来隔离业务和界面
* 利用配置来调用实现类
* 界面上面跑的都是接口
* @author lee
*
*/
public class MantouFactory {
public static Properties properties;
static
{//不用生成类的实例就能直接调用
properties = new Properties();
//加载配置文件
try {
properties.load(MantouFactory.class.getClassLoader().getResourceAsStream("mantou.properties"));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取实例
* @param clazz
* @return
*/
@SuppressWarnings("unchecked")
public static<T> T get(Class<T> clazz)//传入馒头接口
{
//泛型编程,T可以传各种类,实现灵活访问
String simpleName = clazz.getSimpleName();
String className = properties.getProperty(simpleName);
//clazz.getName()//全名
try {
return (T) Class.forName(className).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
2 `馒头的配方(键值对)
Mantou=com.lee.test.mantou.implement.mantouImpl
(馒头接口的实现类名)
3 `定义馒头接口
public interface ManTou(){
public abstract void MantouImplementMethod();
}
4 具体实现馒头 接口的馒头实现类
public class MantouImplement implements Mantou(){
public void MantouImplementMethod(){
//拿到馒头了,吃馒头
}
}
5 具体调用哪吃馒头的方法:
A 没用工厂模式之前:
MantouImplement 吃馒头 = new MantouImplement();
B 调用工厂模式之后:
ManTou 吃馒头 = MantouFactory.get(ManTou.class);
比较俩者的优缺点:
A 可扩展性比较差,当需要吃别的馒头时,需要重新new 一个生产馒头的方法
B 工厂模式的话,就只需要去配方里面修改一下配方,随你吃肉包还是菜包等............