一开始的初学者写Java。例如举一个计算器的小程序。
伪代码:
A = read()
B = read()
#输入运算符
C = read()
if(C == +) do something
if(C == -) do something
if(C == *) do something
if(C == /) do something
or
switch (C)
case "+" do something
case "-" do something
case "*" do something
case "/" do something
这样的代码扩展性和 标准都不达标。
像if 这样的还有判断四次,就很拉。做了几次无用功
好在有 面向对象编程
class opertaion{
getResult(A,B,C){
switch C:
case + :
case - :
case * :
}
}
void main(){
A = read()
B = read()
C = read()
result = new opertaion().getResult(A,B,C)
}
这样子 有了封装特性 并且,逻辑算数模块与 客户端输入数字模块 分离。总算是稍微好看点了。
但是问题又来了,要是某公司的业务逻辑不只是 加减乘除,可能还有矩阵运算,平方差,开平方,幂运算,对数运算等等,
要在 case 里边加上运算逻辑的代码,而且代码都挤在一起,忘记不小心改错其他代码,那分分钟是炒鱿鱼呀
例如:
switch C:{
case + : return result = A+B
case - : return result = A-B
case * :return result = A*B
case 对数 : do something
case 幂:do something
case 平方差 :do something
case 矩阵 :do something
}
太紧凑了。所以得 松耦合 一下!
松耦合
利用继承和多态:
class operation
private A=0
private B=0
public getA()
public getB()
public SetA(A)
public SetB(B)
public getResult()
class operationAdd extend operation //加法
@override
public getResult(){
return getA()+getB()
}
class operationSub extend operation //减法
@override
public getResult(){
return getA()-getB()
}
...................其他类似
这样子既 分开了运算逻辑,达到松耦合。
再增加其他运算逻辑的时候,只需 而外添加一个类继承 operation 实现 方法即可。
而且还符合 工厂模式! 也就是我需要哪个运算功能,就给我哪个功能即可,不用像前边一样一股脑的都给我了
工厂模式:(顾名思义就是 生产某个东西即可)
class operationFactory{
public Operation createOperation(String C){
Operation oper = null
switch C:
case + : oper = new operationAdd ();
case - : oper = new operationSub();
case * : oper = new operationXX ();
case 对数 : oper = new operationXX ();
case 幂: oper = new operationXX ();
case 平方差 : oper = new operationXX ();
case 矩阵 : oper = new operationXX ();
}
return oper;
}
这样子当我需要加法的时候,
main(){
//先生产一个加法功能
Operation oper = OperationFactory.createOperate(C);
//再添加我要运算的值
oper .setA(A)
oper .setB(B)
//返回结果
result = oper.getResult()
}