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

          工廠方法模式又稱為多態性工廠模式虛擬構造子模式;與簡單工廠模式不同,在工廠方法模式中,核心的工廠類不再負責所有具體產品實例的創建,
          而僅僅是需要負責給出具體工廠子類必須實現的接口,讓工廠子類去負責具體產品實例的創建。

          工廠方法模式的一般性結構是:


          簡單工廠模式 類似的,下面使用工廠方法模式來模擬一個簡單的加減乘除的計算器


          工廠方法模式結構示意圖:



          共同運算接口:Operation.java

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

          public interface Operation {

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

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



          加法實現類:OperationAdd.java

          package pattern.factory.method;
          /**
           * -----------------------------------------
           * @描述  加法實現類
           * @作者  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();
              }


          }



          減法實現類:OperationSubtract.java

          package pattern.factory.method;
          /**
           * -----------------------------------------
           * @描述  減法實現類
           * @作者  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();
              }


          }



          乘法實現類:OperationMultiply.java

          package pattern.factory.method;
          /**
           * -----------------------------------------
           * @描述  乘法實現類
           * @作者  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();
              }


          }



          除法實現類:OperationDivision.java
          package pattern.factory.method;
          /**
           * -----------------------------------------
           * @描述  除法實現類
           * @作者  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("警告:被除數不能為0");
                      }
          else{
                          
          return operand1.doubleValue() / operand2.doubleValue();
                      }

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


          }


          抽象工廠接口:OperationCreator.java

          package pattern.factory.method;
          /**
           * -----------------------------------------
           * @描述  抽象工廠接口
           * @作者  fancy
           * @郵箱  fancydeepin@yeah.net
           * @日期  2012-7-30 <p>
           * -----------------------------------------
           
          */

          public interface OperationCreator {

              
          /**
               * <B>方法描述:</B>
               * <p style="margin-left:20px;color:#A52A2A;">
               * 獲取運算實例對象
               * 
          @return <span style="color: #008080;"> 返回運算實例對象 </span>
               
          */

              
          public Operation getInstance();
          }



          加法創造器:CreatorAdd.java

          package pattern.factory.method;
          /**
           * -----------------------------------------
           * @描述  加法
           * @作者  fancy
           * @郵箱  fancydeepin@yeah.net
           * @日期  2012-7-30 <p>
           * -----------------------------------------
           
          */

          public class CreatorAdd implements OperationCreator {

              @Override
              
          public Operation getInstance() {
                  
                  
          return new OperationAdd();
              }


          }



          減法創造器:CreatorSubtract.java

          package pattern.factory.method;
          /**
           * -----------------------------------------
           * @描述  減法
           * @作者  fancy
           * @郵箱  fancydeepin@yeah.net
           * @日期  2012-7-30 <p>
           * -----------------------------------------
           
          */

          public class CreatorSubtract implements OperationCreator {

              @Override
              
          public Operation getInstance() {
                  
                  
          return new OperationSubtract();
              }


          }



          乘法創造器:CreatorMultiply.java

          package pattern.factory.method;
          /**
           * -----------------------------------------
           * @描述  乘法
           * @作者  fancy
           * @郵箱  fancydeepin@yeah.net
           * @日期  2012-7-30 <p>
           * -----------------------------------------
           
          */

          public class CreatorMultiply implements OperationCreator {

              @Override
              
          public Operation getInstance() {
                  
                  
          return new OperationMultiply();
              }


          }



          除法創造器:CreatorDivision.java

          package pattern.factory.method;
          /**
           * -----------------------------------------
           * @描述  除法
           * @作者  fancy
           * @郵箱  fancydeepin@yeah.net
           * @日期  2012-7-30 <p>
           * -----------------------------------------
           
          */

          public class CreatorDivision implements OperationCreator {

              @Override
              
          public Operation getInstance() {
                  
                  
          return new OperationDivision();
              }


          }



          客戶端測試類:Client.java

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

          public class Client {

              
          private static Operation operation;
              
          private static OperationCreator operationCreator;
              
              
          public static void main(String[] args) {
                  
                  operationCreator 
          = new CreatorMultiply();
                  operation 
          = operationCreator.getInstance();
                  System.out.println(operation.operate(
          42.5));
                  operationCreator 
          = new CreatorDivision();
                  operation 
          = operationCreator.getInstance();
                  System.out.println(operation.operate(
          402.5));
                  System.out.println(operation.operate(
          400));
                  
              }


          }



          后臺打印輸出結果:

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


            
          posted on 2012-07-30 17:43 fancydeepin 閱讀(1912) 評論(0)  編輯  收藏

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


          網站導航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           

          隨筆分類(8)

          隨筆檔案(104)

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1462064
          • 排名 - 15

          最新評論

          閱讀排行榜

          主站蜘蛛池模板: 安顺市| 东辽县| 安陆市| 延寿县| 望奎县| 碌曲县| 紫金县| 云南省| 子长县| 长汀县| 张掖市| 安平县| 十堰市| 湛江市| 思南县| 汶川县| 富川| 福海县| 鸡西市| 库伦旗| 扬中市| 迁安市| 麻阳| 丽江市| 渑池县| 建阳市| 甘肃省| 郎溪县| 久治县| 固始县| 屏边| 西林县| 吉安市| 个旧市| 盐山县| 蒙山县| 吴忠市| 甘泉县| 巴马| 武山县| 蚌埠市|