设计模式是一套被反复使用,多人知晓的,经过分类的,代码设计经验的总结。熟练地运用设计模式可以优化你的代码结构,增强代码的稳定性和扩展性。
简单工厂模式是设计模式中比较简单,也比较经常用的一种设计模式。接下来我就用计算器运算的例子来讲解这个模式。
简单工厂模式示例图:
代码示例:
OperationFactory.java(简单工厂类):
package simplefactory;
public class OperationFactory {
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;
}
}
Operation.java(运算类):
package simplefactory;
public abstract class Operation {
private double _numberA = 0;
private double _numberB = 0;
public double get_numberA() {
return _numberA;
}
public void set_numberA(double _numberA) {
this._numberA = _numberA;
}
public double get_numberB() {
return _numberB;
}
public void set_numberB(double _numberB) {
this._numberB = _numberB;
}
public abstract double GetResult() throws Exception;
}
OperationAdd.java(加法类):
package simplefactory;
public class OperationAdd extends Operation {
@Override
public double GetResult() {
double result = 0;
result = get_numberA() + get_numberB();
return result;
}
}
OperationSub.java(减法类):
package simplefactory;
public class OperationSub extends Operation {
@Override
public double GetResult() {
double result = 0;
result = get_numberA() - get_numberB();
return result;
}
}
OperationMul.java(乘法类):
package simplefactory;
public class OperationMul extends Operation {
@Override
public double GetResult() {
double result = 0;
result = get_numberA() * get_numberB();
return result;
}
}
OperationDiv.java(除法类):
package simplefactory;
public class OperationDiv extends Operation {
@Override
public double GetResult() throws Exception {
double result = 0;
if(get_numberB() == 0)
throw new Exception("除数不能为0.");
result = get_numberA() / get_numberB();
return result;
}
}
Main.java
package simplefactory;
public class Main {
public static void main(String[] args) throws Exception {
Operation oper;
oper = OperationFactory.createOperate("+");
oper.set_numberA(1);
oper.set_numberB(2);
double result = oper.GetResult();
System.out.println(result);
}
}
简单工厂类中可以根据条件通过运算类实例化多种运算,这样想要更改运算只需在main方法里改动就行了,增加运算的话就加多一个运算类,在工厂类中加多一个分支就行了。
参考资料:大话设计模式 程杰著 清华大学出版社