大话数据模式(1)简单工厂类-计算器的实现-复用
第一章 代码无错就是优?——简单工厂类
1.1 面试受挫
实现一个+-*/计算,直接写的代码,没有任何特点的代码,耦合性极高、复用没有、代码命名规则糟糕
1.2 初学者代码毛病
①命名不规范;②判断分支差;③鲁棒性差
1.3 代码规范
1.4 面向对象编程
所有的东西都是对象,也有面向过程编程的
1.5 活字印刷,面向对象
活字印刷就是一个面向的生活实例:①复用材料,下次打印书籍,不用重新刻字板了;②维护修改方便,字符有误,可以直接更改这个字模即可;③扩展性,增加、删减内容方便;④灵活性好,可以自由调整顺序
1.6 面向对象的好处
通过封装、继承、多态把程序的耦合度降到最低。
用设计模式使得程序更加灵活。容易修改,并且易于复用。
1.7 复制 VS. 复用
编程有一个原则,就是尽可能的去避免重复
1.8 业务封装
将不同功能性质的对象分开封装,降低耦合性,增强复用性。
1.9 紧耦合 vs.松耦合
将功能块分离,做到互不影响,在对原有代码修改时,做到影响面尽量的小
1.10 简单工厂模型
需要用到谁,才实例化谁,本处只是简单的createBeanFactory
1.11 UML类图
对象名称、属性名称、方法名称
main.java
1 public class main { 2 public static void main(String[] args) { 3 System.out.println("hello world"); 4 Operation oper= OperationFactory.createOperation("+"); 5 oper.setNumberA(3); 6 oper.setNumberB(7); 7 System.out.println(oper.getResult()); 8 } 9 }
Operation.java【定义的抽象类】
1 public abstract class Operation { 2 private double numberA=0; 3 private double numberB=0; 4 5 public double getNumberA() { 6 return numberA; 7 } 8 9 public void setNumberA(double numberA) { 10 this.numberA = numberA; 11 } 12 13 public double getNumberB() { 14 return numberB; 15 } 16 17 public void setNumberB(double numberB) { 18 this.numberB = numberB; 19 } 20 21 public abstract double getResult(); 22 } 23 24 class OperationAdd extends Operation{ 25 @Override 26 public double getResult() { 27 return getNumberA()+getNumberB(); 28 } 29 } 30 31 class OperationSub extends Operation{ 32 @Override 33 public double getResult() { 34 return getNumberA()-getNumberB(); 35 } 36 } 37 38 class OperationMul extends Operation{ 39 @Override 40 public double getResult() { 41 return getNumberA() * getNumberB(); 42 } 43 } 44 45 class OperationDiv extends Operation{ 46 @Override 47 public double getResult() { 48 return getNumberA()/getNumberB(); 49 } 50 }
OperationFactory.java【简单工厂类】
1 public class OperationFactory { 2 public static Operation createOperation(String operate){ 3 Operation oper=null; 4 switch (operate){ 5 case "+": 6 oper=new OperationAdd(); 7 break; 8 case "-": 9 oper=new OperationSub(); 10 break; 11 case "*": 12 oper=new OperationMul(); 13 break; 14 case "/": 15 oper=new OperationDiv(); 16 break; 17 } 18 return oper; 19 } 20 }
探究未知是最大乐趣