简单工厂模式

今天看了一本关于设计模式的书随即写个笔记顺便总结下这本书是:《大话设计模式》

用代码实现一个简单的计算器

下面是最简单的实现计算机的代码

  1. Scanner scanner = new Scanner(System.in);
  2. System.out.println("第一个数字");
  3. double n1 = scanner.nextDouble();
  4. System.out.println("运算符");
  5. String opt = scanner.next();
  6. System.out.println("第二个数字");
  7. double n2 = scanner.nextDouble();
  8. String result = "";
  9. switch (opt) {
  10. case "+":
  11. result = String.valueOf((n1 + n2));
  12. break;
  13. case "-":
  14. result = String.valueOf((n1 - n2));
  15. break;
  16. case "*":
  17. result = String.valueOf((n1 * n2));
  18. break;
  19. case "/":
  20. result = String.valueOf((n1 / n2));
  21. break;
  22. default:
  23. result = "输出的运算符错误";
  24. }
  25. System.out.println(result);

虽然我们可以实现加减乘除,但是呢 以后我们如果新加和改变功能的话会频繁的操作这个代码块,如果代码一直新增功能的话这个方法的业务逻辑将会变得愈来复杂所以我们使用面向对象的方式来简化这个代码块。

使用面向对象的方式简化计算器

  1. public class Operation {
  2. public double add(double n1, double n2){
  3. return (n1 + n2);
  4. }
  5. public double min(double n1, double n2){
  6. return (n1 - n2);
  7. }
  8. public double mul(double n1, double n2){
  9. return (n1 * n2);
  10. }
  11. public double exc(double n1, double n2){
  12. return (n1 / n2);
  13. }
  14. }

我们是用一个Operation类来把业务操作包装起来 如果我们新增和修改业务的话 我们只需要进行新增和修改对应的方法即可,但是我们作为面向对象来说我只用了 封装这个特性,当我们的业务量更大的话 这个类越发的不是那么简单的维护了,所以我们就使用更高级点的操作,简单工厂模式

使用简单工厂模式

抽象类给他们共同的行为

  1. public interface Operation {
  2. /** 计算
  3. * @return result
  4. */
  5. double getResult(double number01 , double number02);
  6. }

我们实现加法操作

  1. public class AddOperation implements Operation {
  2. @Override
  3. public double getResult(double number01, double number02) {
  4. return number01 + number02;
  5. }
  6. }

减法操作

  1. public class MinOperation implements Operation {
  2. @Override
  3. public double getResult(double number01, double number02) {
  4. return number01 - number02;
  5. }
  6. }

乘法操作

  1. public class MulOperation implements Operation {
  2. @Override
  3. public double getResult(double number01, double number02) {
  4. return number01 * number02;
  5. }
  6. }

除法操作

  1. public class ExcOperation implements Operation {
  2. @Override
  3. public double getResult(double number01, double number02) {
  4. return number01 / number02;
  5. }
  6. }

工厂类

  1. public class OperationFactory {
  2. /**
  3. * 根据参数得到具体的运算类
  4. * @param command 指令
  5. * @return 运算类
  6. */
  7. public static Operation getOperation(String command){
  8. switch (command) {
  9. case "+":
  10. return new AddOperation();
  11. case "-":
  12. return new MinOperation();
  13. case "*":
  14. return new MulOperation();
  15. case "/":
  16. return new ExcOperation();
  17. default:
  18. return (m , n) -> -1;
  19. }
  20. }
  21. }

执行操作

  1. public class Run {
  2. public static void main(String[] args) {
  3. Operation operation = OperationFactory.getOperation("+");
  4. System.out.println(operation.getResult(1, 2));
  5. }
  6. }

总结

我们在写代码的时候最初的时候就是只要能运行就是好了,当时当我们的业务庞大的时候我饭就感觉我们写的就是一堆屎山了,所以我们写代码的原则就是:可维护可复用易拓展 这三个特性加杂一起就是牛皮的代码。