乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      設(shè)計(jì)模式學(xué)習(xí)筆記 ———— 簡單工廠模式

       路人甲Java 2021-07-28

      # 背景  

        簡單工廠模式是很多程序員學(xué)習(xí)的第一個設(shè)計(jì)模式,因?yàn)槠洳坏砗唵味乙子谏鲜?,在日常工作的代碼中也常有體現(xiàn)。今天分享一個基于實(shí)現(xiàn)“加”、“減”、“乘”、“除”計(jì)算器的需求基于簡單工廠模式來實(shí)現(xiàn)。

      # 錯誤示范

        在學(xué)習(xí)簡單工廠模式之前,遇到這種需求我是這樣實(shí)現(xiàn)的:

      public static Double Calculator(Double num1, Double num2, String symbol) throws Exception {
              Double result = 0.0D;
              if (symbol == null || num1 == null || num2 == null) {
                  return result;
              }
              switch (symbol) {
                  case "+":
                      result = num1 + num2;
                      break;
                  case "-":
                      result = num1 - num2;
                      break;
                  case "*":
                      result = num1 * num2;
                      break;
                  case "/":
                      if (num2 == 0) {
                          throw new Exception("使用除法的時候分母不能為0");
                      }
                      result = num1 / num2;
                      break;
                  default:{}
      
              }
              return result;
          }

        簡單來說是船艦一個方法,然后通過switch case 一個一個的去判斷,然后對比中的進(jìn)行處理,后續(xù)如果有其他判斷的話,就繼續(xù)在下面在增加case判斷。那么這段代碼實(shí)現(xiàn)了需求了,是實(shí)現(xiàn)了,但是這段代碼是優(yōu)秀的嗎?不是。為什么呢?例如現(xiàn)在客戶需求增加一個平方算法,我們在case中增加這個算法,卻需要加減乘除的運(yùn)算都得來參與編譯,在這個代碼的迭代過程中,如果不小心對原有代碼進(jìn)行了誤操作,會造成很糟糕的結(jié)果,尤其是這個誤操作有可能還不會報錯……所以我們應(yīng)該把加減乘除等運(yùn)算進(jìn)行分離,修改其中一個不會影響另外的幾個,增加平方算法也不影響其他代碼。

        聲明父類

      @Data
      public abstract class Operation {
      
          private double num1;
          private double num2;
      
          protected abstract double getResult();
         
      }

        創(chuàng)建多個計(jì)算類用于繼承父類并重寫getResult方法,這里我分別創(chuàng)建了加減乘除四個類來繼承Operation類,并重寫getResult()方法

      class OperationAdd extends Operation{
      
          @Override
          protected double getResult() {
              return getNum1() + getNum2();
          }
      }
      
      class OperationSub extends Operation {
      
          @Override
          protected double getResult() {
              return getNum1() - getNum2();
          }
      }
      
      class OperationMul extends Operation {
      
          @Override
          protected double getResult() {
              return getNum1() * getNum2();
          }
      }
      
      class OperationDiv extends Operation {
      
          @Override
          protected double getResult() {
              return getNum1() / getNum2();
          }
      }

        此時,我們只需要簡單的寫一個工程方法就可以實(shí)現(xiàn)業(yè)務(wù)要求了。這里只是實(shí)例代碼,很多細(xì)節(jié)判斷沒有加,如果是在生成環(huán)境中,首先入?yún)⒖隙ㄒr?yàn)是否為null,如果為null會報NPE,上面除法運(yùn)算類中,應(yīng)該對分母進(jìn)行判斷,是否為0等等……

      class OperationFactory {
          public static Operation createOperation(String operate) {
              Operation operation;
              switch (operate) {
                  case "+":
                      operation = new OperationAdd();
                      break;
                  case "-":
                      operation = new OperationSub();
                      break;
                  case "*":
                      operation = new OperationMul();
                      break;
                  case "/":
                      operation = new OperationDiv();
                      break;
                  default:{
                      operation = new OperationAdd();
                  }
              }
              return operation;
          }
      }

        測試main方法

      public static void main(String[] args) {
              Operation operation = OperationFactory.createOperation("*");
              operation.setNum1(11d);
              operation.setNum2(1.2);
              System.out.println(operation.getResult());
      }    

        返回結(jié)果:

      13.2

       

        

       

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多