首页 > 技术文章 > 设计模式之简单工厂模式

hssds 2019-10-16 22:43 原文

代码无错就是优?

程序要容易维护,容易扩展,容易复用。

刻版印刷术=》活字印刷术的优点在于:

1、只改需要改的地方,可维护性。

2、用了之后还可以再用,可重用性。

3、加字只需刻字加入就行,可扩展性。

4、横排竖排随便移动,灵活性好。

 

UML图

 

/**
* @author huang
* @date 2019/10/17
*/
public 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 double getResult() {
double result = 0;
return result;
}

static class OperationAdd extends Operation {
public double getResult() {
double result = 0;
result = get_numberA() + get_numberB();
return result;
}
}

static class OperationSub extends Operation {
public double getResult() {
double result = 0;
result = get_numberA() - get_numberB();
return result;
}
}

static class OperationMul extends Operation {
public double getResult() {
double result = 0;
result = get_numberA() * get_numberB();
return result;
}
}

static class OperationDiv extends Operation {
public double getResult() {
double result = 0;
result = get_numberA() / get_numberB();
return result;
}
}

}

/**
* @author huang
* @date 2019/10/17
*/
public class OperationFactory {
public static Operation createOperation(String operation){
Operation operation1 = null;
switch (operation){
case "+":
operation1 = new Operation.OperationAdd();
break;

case "-":
operation1 = new Operation.OperationSub();
break;

case "*":
operation1 = new Operation.OperationMul();
break;

case "/":
operation1 = new Operation.OperationDiv();
break;
}
return operation1;
}

public static void main(String[] args) {
Operation operation;
operation = OperationFactory.createOperation("*");
operation.set_numberA(2);
operation.set_numberB(3);
double result = operation.getResult();
System.out.println(result);
}
}
将new对象的操作交给factory完成。
目的:
1、解耦,将对象的创建和使用分开。
2、降低代码的重复性
3、工厂管理了对象的创建逻辑,使用者不需要知道对象的创建过程,只需使用,避免创建逻辑错误。

适用的场景:
1、对象的创建和实例化,初始化参数,查询数据库。
2、类本身有很多子类,类的创建或调用容易发生改变。

推荐阅读