隨筆-126  評論-247  文章-5  trackbacks-0

          簡單工廠模式又稱為靜態(tài)工廠方法模式,是工廠模式中的一種形態(tài)之一,是一個很根本的設(shè)計(jì)模式;
          簡單工廠模式一般涉及三個角色:工廠角色、具體產(chǎn)品角色、抽象產(chǎn)品角色,模式的核心是工廠類,這個類含有必要的邏輯判斷,
          它根據(jù)傳進(jìn)的不同參數(shù)來判斷應(yīng)當(dāng)創(chuàng)建哪一個具體產(chǎn)品類的實(shí)例,而客戶端則可以免去直接創(chuàng)建具體產(chǎn)品實(shí)例,而僅僅負(fù)責(zé)"消費(fèi)"產(chǎn)品,這種做法很好的實(shí)現(xiàn)了責(zé)任的分割。

          簡單工廠的一般性結(jié)構(gòu):



          根據(jù)模式的這個結(jié)構(gòu),下面來模擬一個簡單的加減乘除的計(jì)算器:

          簡單工廠結(jié)構(gòu)示意圖:


          共同接口:Operation.java

          package pattern.simple.factory;
          /**
           * -----------------------------------------
           * @描述  運(yùn)算接口
           * @作者  fancy
           * @郵箱  fancydeepin@yeah.net
           * @日期  2012-7-30 <p>
           * -----------------------------------------
           
          */

          public interface Operation {

              
          /**
               * <B>方法描述:</B>
               * <p style="margin-left:20px;color:#A52A2A;">
               * 計(jì)算兩個操作數(shù)的運(yùn)算值
               * 
          @param operand1 <span style="color: #008080;"> 操作數(shù)1 </span>
               * 
          @param operand2 <span style="color: #008080;"> 操作數(shù)2 </span>
               * 
          @return <span style="color: #008080;"> 返回兩個操作數(shù)的運(yùn)算值 </span>
               
          */

              
          public double operate(Number operand1, Number operand2);
              
          }



          加法實(shí)現(xiàn)類:OperationAdd.java

          package pattern.simple.factory;
          /**
           * -----------------------------------------
           * @描述  加法實(shí)現(xiàn)類
           * @作者  fancy
           * @郵箱  fancydeepin@yeah.net
           * @日期  2012-7-30 <p>
           * -----------------------------------------
           
          */

          public class OperationAdd implements Operation {

              @Override
              
          public double operate(Number operand1, Number operand2) {
                  
                  
          return operand1.doubleValue() + operand2.doubleValue();
              }


          }



          減法實(shí)現(xiàn)類:OperationSubtract.java

          package pattern.simple.factory;
          /**
           * -----------------------------------------
           * @描述  減法實(shí)現(xiàn)類
           * @作者  fancy
           * @郵箱  fancydeepin@yeah.net
           * @日期  2012-7-30 <p>
           * -----------------------------------------
           
          */

          public class OperationSubtract implements Operation {

              @Override
              
          public double operate(Number operand1, Number operand2) {
                  
                  
          return operand1.doubleValue() - operand2.doubleValue();
              }


          }



          乘法實(shí)現(xiàn)類:OperationMultiply.java

          package pattern.simple.factory;
          /**
           * -----------------------------------------
           * @描述  乘法實(shí)現(xiàn)類
           * @作者  fancy
           * @郵箱  fancydeepin@yeah.net
           * @日期  2012-7-30 <p>
           * -----------------------------------------
           
          */

          public class OperationMultiply implements Operation {

              @Override
              
          public double operate(Number operand1, Number operand2) {
                  
                  
          return operand1.doubleValue() * operand2.doubleValue();
              }


          }



          除法實(shí)現(xiàn)類:OperationDivision.java

          package pattern.simple.factory;
          /**
           * -----------------------------------------
           * @描述  除法實(shí)現(xiàn)類
           * @作者  fancy
           * @郵箱  fancydeepin@yeah.net
           * @日期  2012-7-30 <p>
           * -----------------------------------------
           
          */

          public class OperationDivision implements Operation {

              @Override
              
          public double operate(Number operand1, Number operand2) {
                  
          try {
                      
          if(operand2.doubleValue() == 0.0) {
                          
          throw new Exception("警告:被除數(shù)不能為0");
                      }
          else {
                          
          return operand1.doubleValue() / operand2.doubleValue();
                      }

                  }
           catch (Exception e) {e.printStackTrace();}
                  
          return 0;
              }


          }



          運(yùn)算符異常類:OperatorNotFoundExection.java

          package pattern.simple.factory;
          /**
           * -----------------------------------------
           * @描述  運(yùn)算符異常類
           * @作者  fancy
           * @郵箱  fancydeepin@yeah.net
           * @日期  2012-7-30 <p>
           * -----------------------------------------
           
          */

          public class OperatorNotFoundExection extends Exception {

              
          private static final long serialVersionUID = 1L;

              
          public OperatorNotFoundExection(String errorMsg){
                  
          super(errorMsg);
              }

          }



          簡單工廠實(shí)現(xiàn)類:OperationFactory.java

          package pattern.simple.factory;
          /**
           * -----------------------------------------
           * @描述  簡單工廠類
           * @作者  fancy
           * @郵箱  fancydeepin@yeah.net
           * @日期  2012-7-30 <p>
           * -----------------------------------------
           
          */

          public class OperationFactory {

              
          //私有化構(gòu)造子,防止簡單工廠類實(shí)例被創(chuàng)建
              private OperationFactory(){
                  
              }

              
          /**
               * <B>方法描述:</B>
               * <p style="margin-left:20px;color:#A52A2A;">
               * 獲取與參數(shù)運(yùn)算符相匹配的類實(shí)例
               * 
          @param operator <span style="color: #008080;"> 取值范圍:<BR>
               * ① '+' <BR>
               * ② '-' <BR>
               * ③ '*' <BR>
               * ④ '/' <BR></span>
               * 
          @return <span style="color: #008080;"> 返回與參數(shù)運(yùn)算符相匹配的類實(shí)例 </span>
               
          */

              
          public static Operation getInstance(char operator){
                  
                  
          switch (operator){
                      
          case '+' : 
                          
          return new OperationAdd();
                      
          case '-' : 
                          
          return new OperationSubtract();
                      
          case '*' : 
                          
          return new OperationMultiply();
                      
          case '/' : 
                          
          return new OperationDivision();
                      
          default  : 
                          
          try {
                              
          throw new OperatorNotFoundExection("ERROR:找不到與參數(shù) " + operator + " 相匹配的運(yùn)算符!");
                          }
           catch (OperatorNotFoundExection e) {e.printStackTrace();}
                  }

                  
          return null;
              }

          }



          客戶端測試類:Client.java

          package pattern.simple.factory;
          /**
           * -----------------------------------------
           * @描述  客戶端測試類
           * @作者  fancy
           * @郵箱  fancydeepin@yeah.net
           * @日期  2012-7-30 <p>
           * -----------------------------------------
           
          */

          public class Client {

              
          public static void main(String[] args) {
                  
                  Operation op 
          = OperationFactory.getInstance('*');
                  System.out.println(op.operate(
          42.5));
                  op 
          = OperationFactory.getInstance('/');
                  System.out.println(op.operate(
          402.5));
                  System.out.println(op.operate(
          400));
              }

          }



          后臺打印輸出結(jié)果:

          10.0
          16.0
          java.lang.Exception: 警告:被除數(shù)不能為0
                  at pattern.simple.factory.OperationDivision.operate(OperationDivision.java:16)
              at pattern.simple.factory.Client.main(Client.java:18)


            
          posted on 2012-07-30 14:36 fancydeepin 閱讀(1590) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 台东县| 宁津县| 宜都市| 卓尼县| 旌德县| 噶尔县| 孟州市| 蓬莱市| 昌宁县| 玉田县| 若尔盖县| 司法| 湖州市| 广州市| 罗平县| 保山市| 区。| 彰化县| 旅游| 马关县| 松潘县| 宜章县| 镇平县| 屏南县| 武穴市| 璧山县| 延庆县| 竹北市| 陆良县| 阳城县| 中西区| 枝江市| 福州市| 威远县| 深州市| 都匀市| 商南县| 娄烦县| 密山市| 分宜县| 涡阳县|