设计模式-Java-工厂模式

目录

一、应用场景

二、什么是

三、怎样写

(一)简单工厂模式

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

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

猜你喜欢

转载自blog.csdn.net/u010313979/article/details/107127932
今日推荐