工厂,就是生产各种物品的一个资源管理器,它在我们生活中是非常常见了,比如电子厂生产手机零件,芯片什么的...
工厂模式: 这里用百度百科的词条来解释: 工厂模式是我们最常用的实例化对象模式了,是用工厂方法代替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()));
}