使用场景:
Factory模式是一种创建模式,在Java系统中随处可见,我们在new一个实例对象的时候,就应该想想是否可以使用Factory模式来让我们的程序具备更好的可扩展性和易用性。
为什么要使用:
假设我们在创建一个对象,一般的做法是:
People people = new People();
但是,我们一般在创建的时候,是需要做一些初始化工作的,比如:
People people = new People(int age);
再进一步,实际上,初始化工作并没有这么简单,可能需要做很多的事情, 那么这个构造函数就会越来越大,但稍有经验就会发现,这样会有很大的问题,随着项目的推进,耦合性会越来越强,导致大量的技术负债。
同时People还有很多的继承,例如Student,Teacher,Doctor,Engineer 等。
那么我们不得不修改很久以前定义的那个People类,来使它使用新子类的需求。
Factory模式应运而生!
怎么使用?
1. 普通工厂方法
代码示例:
package Factory;
public class Factory{
public static People creator(int i){
if (i==1) {
return new Student();
}else if (i==2) {
return new Teacher();
}
return null;
}
}
这样,我们在创建了一个制造People的工厂,如果我们要new一个学生:
People student = Factory.creator(1);
具体这个student 怎么new的,交给Student这个类来做,这样就做到低耦合了。
2. 抽象工厂
我们有这样的需求,Create不同的Student,就是同样是Student,我们可能需要不同的构造方法来创建他们,那样就需要抽象工厂。
示例如下:
A. 定义一个抽象工厂类
package Factory;
public abstract class AbstractFactory {
public abstract People creator();
public abstract SpecialPeople creator(int special);
}
B. 定义Student的Factory
package Factory;
public class StudentFactory extends AbstractFactory {
@Override
public People creator() {
// TODO Auto-generated method stub
return new Student();
}
@Override
public SpecialPeople creator(int special) {
// TODO Auto-generated method stub
return new SpecialStudent();
}
}
C. 定义Teacher的Factory
package Factory;
public class TeacherFactory extends AbstractFactory {
@Override
public People creator() {
// TODO Auto-generated method stub
return new Teacher();
}
@Override
public SpecialPeople creator(int special) {
// TODO Auto-generated method stub
return new SpecialTeacher();
}
}
这样Student 工厂就会生产不同的Student, Teacher工厂生产teacher。
作者微信公众号:小强聊架构
网友评论