美文网首页
设计模式一分钟之Factory

设计模式一分钟之Factory

作者: 小强聊架构 | 来源:发表于2018-04-04 15:49 被阅读0次

使用场景:

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。


作者微信公众号:小强聊架构

相关文章

网友评论

      本文标题:设计模式一分钟之Factory

      本文链接:https://www.haomeiwen.com/subject/mdgkhftx.html