版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qixinbruce/article/details/78073775
代码无措就是优?
这个显然不对。代码扩展性强,耦合度低、复用度高和代码能完整实现业务功能同样重要。
面向对象的编程思想指出,好的代码应该是把业务拆分成一个一个独立的模块,模块之间通过某种关系组装到一起就能实现特定的功能。
后期修改或者增加需求的时候,也只需要修改特定模块的内容,不会对整体的代码结构造成影响。
笔者也是java开发的菜鸟一枚,以往大多数编写的代码都缺少面向对象的思想,现在工作中逐渐体现出各种弊端,例如代码难以维护,
实现功能代码量过多、代码逻辑复杂可读性低等等,故现在决定研究设计模式相关知识,把开发工作从本质思想上进行改善。
第一节要学习的设计模式是【简单工厂模式】,本质上这种模式就是把业务进行拆分,可扩展性的功能单独作为一个模块编写,最后再
用一个总体调度的模块,确定具体要执行哪一种功能。
比如开发一个计算器的功能。首先需要把界面展现和业务功能完全独立开来。分成不同模块去编写。之后考虑到计算机的基础功能运算有:
加、减、乘、除。就把这四种功能分别写出,最后通过调度工厂类来确定要实现具体哪一种功能。
相比于传统的写法,简单工厂模式的好处在于如果之后需要增加求平方、开方等功能,只要添加相应的方法,在调度类中增加该方法的判断,
其余的功能都不需要进行改动。(页面调整除外)一定程度爱上增加了代码的灵活性,方便后期对功能进行扩展。
以下是简单工厂模式的计算机后台功能部分代码:
1、基础功能类
/**
* 操作类
*/
public class Operator {
private double number_A = 0;
private double number_B = 0;
public double getNumber_A() {
return number_A;
}
public void setNumber_A(double number_A) {
this.number_A = number_A;
}
public double getNumber_B() {
return number_B;
}
public void setNumber_B(double number_B) {
this.number_B = number_B;
}
public double getResult() {
double result = 0;
return result;
}
}
2、具体功能方法:
public class OperatorAdd extends Operator {
@Override
public double getResult() {
double result = 0;
result = getNumber_A() + getNumber_B();
return result;
}
}
public class OperatorSub extends Operator {
@Override
public double getResult() {
double result = 0;
result = getNumber_A() - getNumber_B();
return result;
}
}
public class OperatorMul extends Operator {
@Override
public double getResult() {
double result = 0;
result = getNumber_A() * getNumber_B();
return result;
}
}
public class OperatorDiv extends Operator {
@Override
public double getResult() {
double result = 0;
if (getNumber_B() == 0) {
new Exception("除数不能为0");
}
result = getNumber_A() / getNumber_B();
return result;
}
}
3、工厂类:
/**
* 工厂类
*/
public class OperationFactory {
public static Operator createOperator(String operator) {
Operator oper = null;
switch (operator) {
case "+":
oper = new OperatorAdd();
break;
case "-":
oper = new OperatorSub();
break;
case "*":
oper = new OperatorMul();
break;
case "/":
oper = new OperatorDiv();
break;
}
return oper;
}
}
4、具体操作方法:
public class Caculator {
public static void main(String[] args) {
Operator operator;
operator = OperationFactory.createOperator("/");
operator.setNumber_A(3);
operator.setNumber_B(4);
double result = operator.getResult();
System.out.println(result);
}
}