工厂模式可以摆脱大量判断语句的影响,通过工厂制造出一个个不同的实例,它的构成:
1. 一个工厂类,通过调用工厂类的方法能够返回一个个不同的实例,
此方法应该能够根据不同的参数返回不同的实例,然后统一复制给共同的接口,
2. 一个通用接口,不同的功能类继承统一的接口, 并且实现统一的接口方法
3. 不同的功能类的具体实现方式,但是最终它们应该觉有统一对外暴露的接口,也就是外界对
不同功能类进行调用,其调用的形式应该是统一的。
流程是:
声明统一的接口,然后使各个功能类继承与这个接口,
接着声明一个工厂类,将这些统不同的功能类注入其中,
然后再主函数中根据参数不同,通过工厂类,制造出一个个
不同的功能类
实例:
1、通用接口:UserService.java
2.继承于接口的不同的功能类:StaffA.java,StaffB.java,StaffC.java
public class StaffA implements UserService {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("I am StaffA");
}
}
public class StaffB implements UserService {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("I am StaffB");
}
}
public class StaffC implements UserService {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("I am StaffC");
}
}
3. 定义的工厂类:FactoryMethod.java
public class FactoryMethod {
/**
* @param args
*/
public static UserService getService(String str) {
// TODO Auto-generated method stub
if ("StaffA".equals(str)) {
return new StaffA();
} else if ("StaffB".equals(str)) {
return new StaffB();
} else if ("StaffC".equals(str)) {
return new StaffC();
} else {
return null;
}
}
}
4. 主函数测试类:FactoryTest.java
public class FactoryTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "StaffA";
UserService us = FactoryMethod.getService(str);
us.run();
}
}
通过参数str就可以通过工厂类生成各种各样的数据了,避免了大量的if,else if操作。