工厂模式

工厂模式可以摆脱大量判断语句的影响,通过工厂制造出一个个不同的实例,它的构成:

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操作。






评论

© ftutor / Powered by LOFTER