设计模式-Java-工厂模式

    技术2025-11-03  7

    目录

    一、应用场景

    二、什么是

    三、怎样写

    (一)简单工厂模式

    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、优缺点

    优点:抽象工厂模式可以在类的内部对产品族进行约束。 缺点:产品族的扩展将是一件十分费力的事情,假如产品族中需要增加一个新的产品,则几乎所有的工厂类都需要进行修改。所以使用抽象工厂模式时,对产品等级结构的划分是非常重要的。

    Processed: 0.015, SQL: 9