目录
 
一、应用场景
 
二、什么是
 
三、怎样写
 
(一)简单工厂模式
 
1、代码编写 
 
2、特点
 
3、优缺点
 
(二)复杂工厂模式
 
1、代码编写
 
2、特点
 
3、优缺点
 
一、应用场景
 
当需要创建的对象是一系列相互关联或相互依赖的产品族时,便可以使用抽象工厂模式。说的更明白一点,就是一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。假如各个等级结构中的实现类之间不存在关联或约束,则使用多个独立的工厂来对产品进行创建,则更合适一点。
 
二、什么是工厂模式
 
定义一个创建对象的接口,让子类决定实例化哪个类,而对象的创建统一交由工厂去生产,有良好的封装性,既做到了解耦,也保证了最少知识原则。
 
任何的设计模式都是用来解决某一些特定场景问题的一种思想,如果在开发过程中遇到某一些问题,可以回顾自己脑海中的所有知识,是不是可以使用设计模式去解决,当然自己也可以不用设计模式,用其他的方式也是可以的,只要能解决就可以
 
三、怎样写工厂模式
 
(一)简单工厂模式
 
1、代码编写 
 
package com.fuping.liuqu.demo.design.pattern.factory;
public interface IFrontEndAngularModule {
    void createRoute();
}
 
package com.fuping.liuqu.demo.design.pattern.factory;
public class ModeAngularModule implements IFrontEndAngularModule {
    @Override
    public void createRoute() {
        System.out.println("this is mode route");
    }
}
 
package com.fuping.liuqu.demo.design.pattern.factory;
public class NoteBookAngularModule implements IFrontEndAngularModule {
    @Override
    public void createRoute() {
        System.out.println("this is notebook route");
    }
}
 
package com.fuping.liuqu.demo.design.pattern.factory;
public class JobAngularModule implements IFrontEndAngularModule {
    @Override
    public void createRoute() {
        System.out.println("this is job route");
    }
}
 
package com.fuping.liuqu.demo.design.pattern.factory;
public class DataSetAngularModule implements IFrontEndAngularModule {
    @Override
    public void createRoute() {
        System.out.println("this is dataset route");
    }
}
 
package com.fuping.liuqu.demo.design.pattern.factory;
public class SimpleFactory {
    // 数据源模块
    public static final int TYPE_DATA_SET = 1;
    // Notebook模块
    public static final int TYPE_NOTEBOOK = 2;
    // WorkFlow模块
    public static final int TYPE_WORKFLOW = 3;
    // 训练作业模块
    public static final int TYPE_JOB = 4;
    // 模型模块
    public static final int TYPE_MODE = 5;
    public static IFrontEndAngularModule createAngularModule(int type) {
        switch (type) {
            case TYPE_DATA_SET:
                return new DataSetAngularModule();
            case TYPE_NOTEBOOK:
                return new NoteBookAngularModule();
            case TYPE_WORKFLOW:
                return new WorkFlowAngularModule();
            case TYPE_JOB:
                return new JobAngularModule();
            case TYPE_MODE:
            default:
                return new ModeAngularModule();
        }
    }
}
 
package com.fuping.liuqu.demo.design.pattern.factory;
public class SimpleFactoryTest {
    public static void main(String[] args) {
        //简单工厂模式
        IFrontEndAngularModule iFrontEndAngularModule = SimpleFactory.createAngularModule(SimpleFactory.TYPE_DATA_SET);
        iFrontEndAngularModule.createRoute();
    }
}
 
2、特点
 
工厂方法中用一个静态的方法去选择实现的类,大多数使用if-else、switch-case及策略模式。
 
3、优缺点
 
优点:逻辑简单,易于理解
 
缺点:扩展性差,新增模块类,还需要修改工厂
 
(二)复杂工厂模式
 
1、代码编写
 
package com.fuping.liuqu.demo.design.pattern.factory.complex;
public interface IBackEndModule {
    void createRoute();
} 
package com.fuping.liuqu.demo.design.pattern.factory.complex;
public interface IFrontEndModule {
    void createRoute();
}
 
package com.fuping.liuqu.demo.design.pattern.factory.complex;
public class DataSetFrontEndModule implements IFrontEndModule {
    @Override
    public void createRoute() {
        System.out.println("this is front end dataset route");
    }
}
 
package com.fuping.liuqu.demo.design.pattern.factory.complex;
public class DataSetBackEndModule implements IBackEndModule {
    @Override
    public void createRoute() {
        System.out.println("this is back end dataset route");
    }
}
 
package com.fuping.liuqu.demo.design.pattern.factory.complex;
public interface IComplexFactory {
    IFrontEndModule createFrontEndModule();
    IBackEndModule createBackEndModule();
}
 
package com.fuping.liuqu.demo.design.pattern.factory.complex;
public class ComplexFactory implements IComplexFactory{
    @Override
    public IFrontEndModule createFrontEndModule() {
        return new DataSetFrontEndModule();
    }
    @Override
    public IBackEndModule createBackEndModule() {
        return new DataSetBackEndModule();
    }
}
 
package com.fuping.liuqu.demo.design.pattern.factory.complex;
public class ComplexFactoryTest {
    public static void main(String[] args){
        ComplexFactory complexFactory = new ComplexFactory();
        complexFactory.createFrontEndModule().createRoute();
        complexFactory.createBackEndModule().createRoute();
    }
}
 
2、特点
 
产品族都属于同一类的不同等级。
 
3、优缺点
 
优点:抽象工厂模式可以在类的内部对产品族进行约束。 缺点:产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。