简单工厂模式:
例如:我喜欢吃面条,抽象成一个面条基类(接口也可以)。
通过分析第一步如下:
/**
*
* @author 坏小孩
* 简单工厂模式
*/
public abstract class INoodles {
/**
* 定义一个抽象的描述方法
*/
public abstract void desc();
}
第二步如下:(具体实现)
/**
*
* @author 坏小孩
* 面条的具体实现类之一
*/
public class LZNoodles extends INoodles {
@Override
public void desc() {
System.out.println("拉面");
}
}
第三步:(另一个实现)
/**
*
* @author 坏小孩
* 面条的实现类之二
*/
public class PaoNoodles extends INoodles{
@Override
public void desc() {
System.out.println("程序员加班必备-----方便面");
}
}
第四步:(另一个实现)
/**
*
* @author 坏小孩
* 面条实现类之三
*/
public class HomeNoodes extends INoodles {
@Override
public void desc() {
System.out.println("你最爱的家乡面");
}
}
当然写了这么多只是为了准备工厂所需要的原材料
第五步:(工厂类)
/**
* 工厂类
* @author 坏小孩
*
*/
public class NoodlesFactory {
public static final int TYPE_LM = 1;//拉面
public static final int TYPE_PM = 2;//方便面
public static final int TYPE_HOME = 3;//家乡面
public static INoodles createNoodles(int type) {
switch (type) {
case TYPE_LM:
return new LZNoodles();
case TYPE_PM:
return new PaoNoodles();
case TYPE_HOME:
default:
return new HomeNoodes();
}
}
}
当代码写到这里你是不是已经想到接下来干啥了,接下来我们需要把工厂对象给创建出来然后通过工厂创造我们想要的对象。
public static void main(String[] args) {
NoodlesFactory factory = new NoodlesFactory();
//只需要输入你想要面条所对应的值即可返回你想要的对象
INoodles noodles = NoodlesFactory.createNoodles(1);
noodles.desc();
}
特点
1 它是一个具体的类,非接口 抽象类。有一个重要的create()方法,利用if或者 switch创建产品并返回。
2 create()方法通常是静态的,所以也称之为静态工厂。
缺点
1 扩展性差(我想增加一种面条,除了新增一个面条产品类,还需要修改工厂类方法)
2 不同的产品需要不同额外参数的时候 不支持。