既然要写关于设计模式的文章,当然是从最简单的简单工厂模式,或者说静态工厂模式说起。一句话概括——简单工厂模式其实就是根据不同的条件由工厂类去实例化不同的实现类,在使用的时候,并不需要去关心实现类的内部方法具体是怎么实现的,只需要关心实例化了哪个类。
所以简单来说,简单工厂模式就是——对共性开放,对个性封闭。
我们来简单举个例子,假设我要做一个加减乘除算法,但是我并不关心算法的内部是怎么实现的,仅仅管关心自己实现的哪一种算法,首先需要一个被继承的算法类:
public abstract class Operation{
public abstract void operation();
}
我在这儿直接就写成抽象类了,以提醒子类必须重写。
然后是加法类和减法类的具体实现:
public class OperationAdd extends Operation{
@Override
public void operation() {
System.out.println("实现了加法算法");
}
}
public class OperationSub extends Operation {
@Override
public void operation() {
System.out.println("实现了减法算法");
}
}
是用来实例化这个加法或者减法的工厂类:
public class OperationFactory {
public static Operation createOperate(String operate){
Operation operation = null;
switch (operate){
case "add":
operation = new OperationAdd();
break;
case "sub":
operation = new OperationSub();
break;
default:
break;
}
return operation;
}
}
最后就是使用啦:
public static void main(String[] args) {
// TODO Auto-generated method stub
Operation operation;
operation = OperationFactory.createOperate("sub");
operation.operation();
}
其实从这个例子就能看出来,静态工厂的缺点还是很明显的,那就是不符合“开放—闭合”模式,如果要新增或者删除一种算法,不但需要对算法类进行操作,还需要对工厂类进行操作,但好处也是显而易见的,就是将算法结构给剥离了出来,将方法的具体实现和引用进行了剥离。