设计模式之简单工厂模式

前些天,拜读完大作大话设计模式,里面的示例代码是用C#写的,为了让自己加深一下影响,决定用Java写一下,顺便学着画画UML图^~^
UML:

Operation

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public abstract class Operation {
private double numberA = 0;
private double numberB = 0;
private double result = 0;
public double getResult() {
return result;
}
public void setResult(double result) {
this.result = result;
}
public double getNumberA() {
return numberA;
}
public void setNumberA(double numberA) {
this.numberA = numberA;
}
public double getNumberB() {
return numberB;
}
public void setNumberB(double numberB) {
this.numberB = numberB;
}
public abstract double calculate();
}

OperationFactory

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class OperationFactory {
public static Operation createOperate(String operate){
Operation operation = null;
switch (operate){
case "+":
operation = new OperationAdd();
break;
case "-":
operation = new OperationSub();
break;
case "*":
operation = new OperationMul();
break;
case "/":
operation = new OperationDiv();
}
return operation;
}
}

OperationAdd

1
2
3
4
5
6
7
public class OperationAdd extends Operation {
@Override
public double calculate() {
setResult(getNumberA() + getNumberB());
return getResult();
}
}

OperationDiv

1
2
3
4
5
6
7
public class OperationDiv extends Operation{
@Override
public double calculate() {
setResult(getNumberA() / getNumberB());
return getResult();
}
}

OperationSub

1
2
3
4
5
6
7
8
public class OperationSub extends Operation{
@Override
public double calculate() {
setResult(getNumberA() - getNumberB());
return getResult();
}
}

OperationMul

1
2
3
4
5
6
7
public class OperationMul extends Operation{
@Override
public double calculate() {
setResult(getNumberA() * getNumberB());
return getResult();
}
}

Client

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Client {
public static void main(String [] args){
Operation opera;
opera = OperationFactory.createOperate("+");
opera.setNumberA(1);
opera.setNumberB(2);
opera.calculate();
System.out.println(opera.getResult());
opera =OperationFactory.createOperate("-");
opera.setNumberA(1);
opera.setNumberB(2);
opera.calculate();
System.out.println(opera.getResult());
}
}

编程是一门技术,更是一门艺术