用java接口實現(xiàn)工廠模式如下:
interface Service{
void method1();
void method2();
}
interface ServiceFactory{
Service getService();
}
class Implementation1 implements Service{
Implementation1(){};
public void method1(){System.out.println("Implemention1 method1");}
public void method2(){System.out.println("Implemention1 method2");}
}
class Implementation2 implements Service{
Implementation2(){}
public void method1(){System.out.println("Implementation2 method1");}
public void method2(){System.out.println("Implementation2 method2");}
}
class Implementation1ServiceFactory implements ServiceFactory{
public Service getService(){
return new Implementation1();
}
}
class Implementation2ServiceFactory implements ServiceFactory{
public Service getService(){
return new Implementation2();
}
}
public class TopCoder{
public static void main(String[] args){
serviceConsumer(new Implementation1ServiceFactory());
serviceConsumer(new Implementation2ServiceFactory());
}
public static void serviceConsumer(ServiceFactory sf){
Service s=sf.getService();
s.method1();
s.method2();
}
}
該實現(xiàn)有一個小小的缺憾,那就是Implementation1 和 Implementation2的構造函數(shù)都是public。下面用Java的內(nèi)部類實現(xiàn)工廠模式,可以彌補這個缺憾
interface Service{
void method1();
void method2();
}
interface ServiceFactory{
Service getService();
}
class Implementation1 implements Service{
Implementation1(){};
public void method1(){System.out.println("Implemention1 method1");}
public void method2(){System.out.println("Implemention1 method2");}
public static ServiceFactory factory=new ServiceFactory(){
public Service getService(){
return new Implementation1();
}
};
}
class Implementation2 implements Service{
Implementation2(){}
public void method1(){System.out.println("Implementation2 method1");}
public void method2(){System.out.println("Implementation2 method2");}
public static ServiceFactory factory=new ServiceFactory(){
public Service getService(){
return new Implementation2();
}
};
}
public class TopCoder{
public static void main(String[] args){
serviceConsumer(Implementation1.factory);
serviceConsumer(Implementation2.factory);
}
public static void serviceConsumer(ServiceFactory sf){
Service s=sf.getService();
s.method1();
s.method2();
}
}