首页 新闻 赞助 找找看

请教关于 简单工厂的问题 ??请java神解答!!!

0
悬赏园豆:10 [已关闭问题] 关闭于 2012-11-23 20:04

《研磨设计模式》一书总提到简单工厂模式,缺点:如果增加实现类,就要修改工厂类。

提到一种解决方案:使用配置文件;

FactoryTest.properties:
ImplClass=factory.Impl1

Api:package factory;

public interface Api { 
public void test1(String s);
}
Impl1:package factory;

public class Impl1 implements Api{

public void test1(String s) {
System.out.println("测试1:"+s);
}

}
factory:
package factory;

import java.io.InputStream;
import java.util.Properties;

public class Factory {
public static Api createApi(){
Properties p = new Properties();
InputStream in = null;
try {
in = Factory.class.getResourceAsStream("FactoryTest.properties");
p.load(in);
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}

Api api = null;
try {
api = (Api)Class.forName(p.getProperty("ImplClass")).newInstance(); } catch (Exception e) {
e.printStackTrace();
}
return api;
}
}
Client
package factory;

public class Client {
public static void main(String[] args) {
Api api = Factory.createApi();
api.test1("Hello...");
}
}

但是我有两个实现类呢?客服端怎么判断?Impl2:
package factory;

public class Impl2 implements Api{

public void test1(String s) {
System.out.println("测试2:"+s);
}

}

FactoryTest.properties:是不是要写成:
ImplClass=factory.Impl1
ImplClass2=factory.Impl2
但这里还是要修改啊。
api = (Api)Class.forName(p.getProperty("ImplClass")).newInstance();

向java神求解!!!具体是怎么做的??
在线等!!!!!!!! 

11hxian.com的主页 11hxian.com | 初学一级 | 园豆:70
提问于:2012-11-22 21:47
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册