《研磨设计模式》一书总提到简单工厂模式,缺点:如果增加实现类,就要修改工厂类。
提到一种解决方案:使用配置文件;
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神求解!!!具体是怎么做的??
在线等!!!!!!!!