夢(mèng)幻之旅

          DEBUG - 天道酬勤

             :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            671 隨筆 :: 6 文章 :: 256 評(píng)論 :: 0 Trackbacks
          模板方法
              定義一個(gè)操作算法的骨架,而將一些步驟沿遲到子類中去實(shí)現(xiàn),模板方法使了類可能不改變算法的結(jié)構(gòu)即可以重定義該算法的某一些特定步驟.
          組成部份
             1.抽象模板 是一個(gè)抽象類,包含一系列的算法和一個(gè)模板方法,模板方法需要加final來修飾.
             2.具體模板 繼承自抽象類.
          各組成部份之間的關(guān)系

          適用場(chǎng)景:
          設(shè)計(jì)者需要給出一個(gè)算法的固定步驟,并將某一些步驟的具體實(shí)現(xiàn)留給子類來實(shí)現(xiàn).
          需要對(duì)代碼進(jìn)行重構(gòu),將各個(gè)子類的公共行為取出來放到一個(gè)共同的父親類中以避免代碼重復(fù)

          例子:
          1.抽象模板
          package template;

          /**
           * <ul>
           * <li>Title:[AbstractTemplate]</li>
           * <li>Description: [抽象模板]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-2]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
          @version 1.0  
           
          */

          public abstract class DatabaseExecuteTemplate
          {   
              
          /**
               * <ul>
               * <li>Description:[加載驅(qū)動(dòng)]</li>
               * <li>Created by [Huyvanpull] [2011-8-2]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              
          public abstract void loadDrive();
              
              
          /**
               * <ul>
               * <li>Description:[連接數(shù)據(jù)庫]</li>
               * <li>Created by [Huyvanpull] [2011-8-2]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              
          public abstract void connectDataBase();
              
              
          /**
               * <ul>
               * <li>Description:[創(chuàng)建statement]</li>
               * <li>Created by [Huyvanpull] [2011-8-2]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              
          public abstract void createStatement();
              
              
          /**
               * <ul>
               * <li>Description:[執(zhí)行sql]</li>
               * <li>Created by [Huyvanpull] [2011-8-2]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              
          public abstract void executeSQL(String sql);
              
              
          /**
               * <ul>
               * <li>Description:[關(guān)閉statement]</li>
               * <li>Created by [Huyvanpull] [2011-8-2]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              
          public abstract void closeStatement();
              
              
          /**
               * <ul>
               * <li>Description:[關(guān)閉連接]</li>
               * <li>Created by [Huyvanpull] [2011-8-2]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               
          */

              
          public abstract void closeConnect();
              
              
          /**
               * <ul>
               * <li>Description:[是否刷新勾子]</li>
               * <li>Created by [Huyvanpull] [2011-8-2]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
          @return
               
          */

              
          public abstract boolean isFresh();
              
              
          /**
               * <ul>
               * <li>Description:[刷新]</li>
               * <li>Created by [Huyvanpull] [2011-8-2]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
          @return
               
          */

              
          public abstract void fresh();
              
              
          /**
               * <ul>
               * <li>Description:[執(zhí)行sql]</li>
               * <li>Created by [Huyvanpull] [2011-8-2]</li>
               * <li>Midified by [modifier] [modified time]</li>
               * </ul>
               * 
          @param sql
               
          */

              
          public final void exceute(String sql)
              
          {
                  
          // 加載驅(qū)動(dòng)
                  this.loadDrive();
                  
                  
          // 連接數(shù)據(jù)庫
                  this.connectDataBase();
                  
                  
          // 創(chuàng)建statement
                  this.createStatement();
                  
                  
          // 執(zhí)行sql
                  this.executeSQL(sql);
                  
                  
          //關(guān)閉statement
                  this.closeStatement();
                  
                  
          // 關(guān)系連接
                  this.closeConnect();
                  
                  
          // 使用勾子改變算法
                  if(isFresh())
                  
          {
                      
          // 刷新操作
                      this.fresh();
                  }

              }

          }


          2.具體模板1
          package template;

          /**
           * <ul>
           * <li>Title:[OracleExecuteTemple]</li>
           * <li>Description: [oracle模板]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-2]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
           * 
          @version 1.0
           
          */

          public class OracleExecuteTemple extends DatabaseExecuteTemplate
          {
              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#closeConnect()
               
          */

              
          public void closeConnect()
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println("oracle 關(guān)閉連接");
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#closeStatement()
               
          */

              
          public void closeStatement()
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println("oracle 關(guān)閉statement");
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#connectDataBase()
               
          */

              
          public void connectDataBase()
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println("oracle 連接數(shù)據(jù)庫");
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#createStatement()
               
          */

              
          public void createStatement()
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println("oracle 創(chuàng)建statement");
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#executeSQL()
               
          */

              
          public void executeSQL(String sql)
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println("oracle 執(zhí)行SQL: " + sql);
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#fresh()
               
          */

              
          public void fresh()
              
          {
                  System.out.println(
          "oracle 刷新");
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#isFresh()
               
          */

              
          public boolean isFresh()
              
          {
                  
                  
          return false;
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#loadDrive()
               
          */

              
          public void loadDrive()
              
          {
                  System.out.println(
          "oracle 加載驅(qū)動(dòng)");
              }

              
          }


          3.具體模板2
          package template;

          /**
           * <ul>
           * <li>Title:[DB2ExecuteTemple]</li>
           * <li>Description: [DB2模板]</li>
           * <li>Copyright 2009 Upengs Co., Ltd.</li>
           * <li>All right reserved.</li>
           * <li>Created by [Huyvanpull] [2011-8-2]</li>
           * <li>Midified by [modifier] [modified time]</li>
           * </ul>
           * 
           * 
          @version 1.0
           
          */

          public class DB2ExecuteTemple extends DatabaseExecuteTemplate
          {
              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#closeConnect()
               
          */

              
          public void closeConnect()
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println("DB2 關(guān)閉連接");
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#closeStatement()
               
          */

              
          public void closeStatement()
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println("DB2 關(guān)閉statement");
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#connectDataBase()
               
          */

              
          public void connectDataBase()
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println("DB2 連接數(shù)據(jù)庫");
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#createStatement()
               
          */

              
          public void createStatement()
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println("DB2 創(chuàng)建statement");
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#executeSQL()
               
          */

              
          public void executeSQL(String sql)
              
          {
                  
          // TODO Auto-generated method stub
                  System.out.println("DB2 執(zhí)行SQL: " + sql);
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#fresh()
               
          */

              
          public void fresh()
              
          {
                  System.out.println(
          "DB2 刷新");
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#isFresh()
               
          */

              
          public boolean isFresh()
              
          {
                  
          return true;
              }

              
              
          /*
               * (non-Javadoc)
               * 
               * @see template.DatabaseExecuteTemplate#loadDrive()
               
          */

              
          public void loadDrive()
              
          {
                  System.out.println(
          "DB2 加載驅(qū)動(dòng)");
              }

              
          }


          4.測(cè)試類
          package template;

          public class Test
          {   
              
          public static void main(String[] args)
              
          {
                  DatabaseExecuteTemplate db2 
          = new DB2ExecuteTemple();
                  db2.exceute(
          "select count(*) from users");
                  
                  OracleExecuteTemple oracle 
          = new OracleExecuteTemple();
                  oracle.exceute(
          "select count(*) from users");
              }

          }

          posted on 2011-08-02 17:28 HUIKK 閱讀(388) 評(píng)論(0)  編輯  收藏 所屬分類: Design Patterns
          主站蜘蛛池模板: 金坛市| 新郑市| 抚州市| 维西| 探索| 荣昌县| 友谊县| 全椒县| 陇西县| 铜陵市| 碌曲县| 鄂托克前旗| 阜宁县| 临澧县| 东港市| 丹棱县| 镇安县| 榆中县| 黄陵县| 教育| 乳源| 安多县| 尼勒克县| 柳州市| 龙海市| 溆浦县| 邯郸县| 灵石县| 荆门市| 宕昌县| 安阳市| 集贤县| 镇远县| 霞浦县| 福海县| 雷州市| 牡丹江市| 葵青区| 台州市| 天全县| 六安市|