本文是<大话设计模式>中的一个案例,读了以后我觉得有所收获,所以来分享一下。
说到面向对象肯定会想到面向过程。一个简单的题目:采用面向语言编写一个计算器控制台程序
面向过程的写法:
import java.io.InputStream;
import java.util.Scanner;
public class Program {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字A");
int numberA = Integer.parseInt(scanner.next());
System.out.println("请输入数字B");
int numberB = Integer.parseInt(scanner.next());
System.out.println("请输入操作符");
String op = scanner.next();
double result = 0;
if(op.equalsIgnoreCase("+")){
result = numberA + numberB;
}else if(op.equalsIgnoreCase("-")){
result = numberA - numberB;
}else if (op.equalsIgnoreCase("*")){
result = numberA * numberB;
}else if (op.equalsIgnoreCase("/")){
result = numberA / numberB;
}
System.out.println("输出的结果为 : "+ result);
}
}
而面向对象的写法如下:
<pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'Source Code Pro';font-size:10.5pt;"><span style="color:#629755;"><em>
</em></span><span style="color:#cc7832;">public class </span><span style="color:#1398a9;">Operation </span>{
<span style="color:#cc7832;">private int </span><span style="color:#9876aa;">numberA</span><span style="color:#cc7832;">;
</span><span style="color:#cc7832;"> private int </span><span style="color:#9876aa;">numberB</span><span style="color:#cc7832;">;
</span><span style="color:#cc7832;">
</span><span style="color:#cc7832;"> public int </span><span style="color:#ffc66d;">getNumberA</span>() {
<span style="color:#cc7832;">return </span><span style="color:#9876aa;">numberA</span><span style="color:#cc7832;">;
</span><span style="color:#cc7832;"> </span>}
<span style="color:#cc7832;">public void </span><span style="color:#ffc66d;">setNumberA</span>(<span style="color:#cc7832;">int </span>numberA) {
<span style="color:#cc7832;">this</span>.<span style="color:#9876aa;">numberA </span>= numberA<span style="color:#cc7832;">;
</span><span style="color:#cc7832;"> </span>}
<span style="color:#cc7832;">public int </span><span style="color:#ffc66d;">getNumberB</span>() {
<span style="color:#cc7832;">return </span><span style="color:#9876aa;">numberB</span><span style="color:#cc7832;">;
</span><span style="color:#cc7832;"> </span>}
<span style="color:#cc7832;">public void </span><span style="color:#ffc66d;">setNumberB</span>(<span style="color:#cc7832;">int </span>numberB) {
<span style="color:#cc7832;">this</span>.<span style="color:#9876aa;">numberB </span>= numberB<span style="color:#cc7832;">;
</span><span style="color:#cc7832;"> </span>}
<span style="color:#cc7832;">public double </span><span style="color:#ffc66d;">getResult</span>() {
<span style="color:#cc7832;">double </span>result = <span style="color:#6897bb;">0</span><span style="color:#cc7832;">;
</span><span style="color:#cc7832;"> return </span>result<span style="color:#cc7832;">;
</span><span style="color:#cc7832;"> </span>}
<pre style="background-color:#2b2b2b;color:#a9b7c6;font-family:'Source Code Pro';font-size:10.5pt;"><span style="color:#629755;"><em>
</em></span><span style="color:#cc7832;">public class </span><span style="color:#1398a9;">OperationAdd </span><span style="color:#cc7832;">extends </span><span style="color:#1398a9;">Operation</span>{
<span style="color:#bbb529;">@Override
</span><span style="color:#bbb529;"> </span><span style="color:#cc7832;">public double </span><span style="color:#ffc66d;">getResult</span>() {
<span style="color:#cc7832;">return </span><span style="color:#c2bb54;">getNumberA</span>() + <span style="color:#c2bb54;">getNumberB</span>()<span style="color:#cc7832;">;
</span><span style="color:#cc7832;"> </span>}
}
public class OperationDiv extends Operation { @Override public double getResult() { return getNumberA() / getNumberB(); } }
public class OperationMul extends Operation { @Override public double getResult() { return getNumberA() * getNumberB(); } }
public class OperationSub extends Operation { @Override public double getResult() { return getNumberA() - getNumberB(); } }
public class OperationFactory { public static Operation createOperation(String op){ Operation operation = null; switch (op){ case "+": operation = new OperationAdd(); break; case "-": operation = new OperationSub(); break; case "*": operation = new OperationMul(); break; case "/": operation = new OperationDiv(); break; } return operation; } }
public class Program2 { public static void main(String[] args) { Operation oper; oper = OperationFactory.createOperation("+"); oper.setNumberA(1); oper.setNumberB(2); double result = oper.getResult(); System.out.println("结果为:"+result); } }
这昂会有更加的优秀的扩张性和可维护性。