工厂,就是生产各种物品的一个资源管理器,它在我们生活中是非常常见了,比如电子厂生产手机零件,芯片什么的...

工厂模式: 这里用百度百科的词条来解释: 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替new操作的一种模式。著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见。因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象。

在我们java生态中,spring对工厂模式运用的可算是极致了,顶级类BeanFactory是bean的最顶级的工厂类...

在这里,我模拟一下工厂模式: 先说一下工厂模式需要的角色: 机器? 生产的具体物品? ... 是的,是这样的,这里我定义一个机器,它具有生产物品的方法

package com.example.demo.core.design;

/**
 * @author ChoviWu 
 * Description :
 */
public interface Machine<T> {

    <T> T create(Object obj);
}

正如我们所想的,面条的机器可以创造面条,芯片的机器可以生产芯片,宝马的机器可以创造宝马...,所以我们这里用泛型来进行表示

所以,我们在这里以面条为例,创建一个面条机器的超类,并实现机器的方法

package com.example.demo.core.design;
/**
 * @author ChoviWu 
 * Description :
 */
public abstract class NoodlesMachine implements Machine<Noodle>{

    @Override
    public Noodle create(Object obj) {
        return new Noodle();
    }
}

如果机器要生产兰州拉面,即继承NoodlesMachine即可,并创建对应的兰州拉面类,代码如下:

package com.example.demo.core.design;

/**
 * @author ChoviWu 
 * Description :
 */
public class LzNoodlesMachine extends NoodlesMachine {

    @Override
    public Noodle create(Object obj) {
        return new LzNoodles();
    }
}

package com.example.demo.core.design;

/**
 * @author ChoviWu 
 * Description :
 */
public class LzNoodles extends Noodle {
    
    private String name = "LZ";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

如果需要做biangbiang面,则可以继续扩展...只需要集成NoodlesMachine类即可。试想,天下的面条种类那么多,工厂模式是非常容易扩展的,实现思路即java的“多态”

这里,就已经实现了一个简单的工厂模式,即简单工厂模式

当你的宝马机器生产宝马的时候,这个时候只需要拓展Machine类即可,这个时候Machine类作为工厂模式的一个标准(即类似于BeanFactory) 生产宝马流程与面条一样:

package com.example.demo.core.design;

/**
 * @author ChoviWu 
 * Description :
 */
public abstract class BMWMachine implements Machine<BMW> {

    @Override
    public BMW create(Object obj) {
        return new BMW();
    }
}

测试用例:

public static void main(String[] args) {
        Machine machine = new LzNoodlesMachine();
        System.out.println(machine.create(new Object()));
        machine = new BMWMachine();
        System.out.println(machine.create(new Object())); 
    }

这就是java的工厂模式。