美文网首页
设计模式一分钟之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