业务和界面分离
面向对象:封装、继承、多态。
封装 -- 简化重复代码;封装过程和数据;只关注使用,不关注实现。
继承 -- 提高代码复用性、维护性(新增功能时,只需新增一个子类,无需修改旧代码文件,安全性提高);让类与类之间产生了关联,是多态的前提。
多态 -- 运行时绑定;提高代码扩展性;概念:用基类的引用指向子类的对象;同一操作作用于不同的对象,可以产生不同的执行结果。
- 封装、继承都是为了解决代码重用,多态则是为了扩展。
- 继承会提高耦合度,而多态则是把系统分解成一个个子模块,子模块提供稳定的接口,从而降低耦合度。
- 模块之间尽量使用模块接口访问,而不是随意引用其他模块的成员变量。
面向对象的编程,并不是类越多越好。类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。
package o1SimpleFactory;
/**
* 运算类 基类
* 属性 a、b 以及getResult方法
*/
public class Operation {
private double a;
private double b;
public double getA() {
return a;
}
public void setA(double a) {
this.a = a;
}
public double getB() {
return b;
}
public void setB(double b) {
this.b = b;
}
public Object getResult() {
return null;
}
}
package o1SimpleFactory;
/**
* 子类 加法类
* getResult 具体功能实现
*/
public class Add extends Operation {
@Override
public Object getResult() {
return super.getA() + super.getB();
}
}
package o1SimpleFactory;
/**
* 子类 乘法类
* getResult 具体功能实现
*/
public class Mul extends Operation {
@Override
public Object getResult() {
return super.getA() * super.getB();
}
}
package o1SimpleFactory;
/**
* 工厂类 创造具体运算类
*/
public class OperateFactory {
public static Operation getOperation(String opr) {
Operation operation = null;
switch (opr) {
case "+":
operation = new Add();
break;
case "-":
operation = new Sub();
break;
case "*":
operation = new Mul();
break;
case "/":
operation = new Div();
break;
}
return operation;
}
}
package o1SimpleFactory;
/**
* 调用者 界面
* 只关注结果,不关注具体实现
*/
public class Test {
public static void main(String[] args) {
Operation op = OperateFactory.getOperation("+");
op.setA(4);
op.setB(6);
System.out.println(op.getResult());
}
}