定义:一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式不属于GOF23种设计模式之一,简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。
/**
* 操作工厂类
*/
class OperationFactory {
/**
*
* @param operate 根据传进来的操作符,选择实例化响应的对象
* @return
*/
public static Operation createOperate(String operate){
Operation oper = null;
switch(operate){
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
}
return oper;
}
}
/**
* 操作抽象类,各种算数操作需要继承此类,并实现getResult方法
*/
public abstract class Operation {
abstract Integer getResult(int a, int b);
}
class OperationAdd extends Operation {
@Override
Integer getResult(int a, int b) {
return a+b;
}
}
class OperationSub extends Operation {
@Override
Integer getResult(int a, int b) {
return a-b;
}
}
class OperationMul extends Operation {
@Override
Integer getResult(int a, int b) {
return a*b;
}
}
class OperationDiv extends Operation {
@Override
Integer getResult(int a, int b) {
return a/b;
}
}
/**
* 测试操作不再赘述
*/
public static void main(String[] args) {
Operation oper = OperationFactory.createOperate("+");
oper.getResult(10, 5);
}
优点:能根据需要(传入的参数)创建对象。
缺点:很明显,如果有需求变更,便需要更改操作工厂类,需要再加一个“case”,再增加一个具体的操作类,违反了开放-封闭原则;而且,如果有相当多的分支的话,会导致代码不易阅读的不良后果。
总结:如果操作工厂类(也就是需求)在相当长的一段时间不会变更的话,那么此模式就有使用的必要了。(后面会看到简单工厂模式的便利之处)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。