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

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

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

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神求解!!!
在线等!!!!!!!!
...全文
39 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧