<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 設計模式綜合實例分析之數據庫同步系統(二) 接“設計模式綜合實例分析之數據庫同步系統(一)“。 3. 享元模式和單例模式 在數據庫同步系統中,抽象類DBObjectSynchronizer表示需要同步的數據庫對象,對于不同的數據庫對象類型,提供了不同的子類實現,在數據庫同步時可能有多個線程在同時進行同步工作,為了節省系統資源,可以使用享元模式來共享DBObjectSynchroizer對象,提供了享元工廠類DBObjectSynchronizerFlyweightFactory,且享元工廠類使用單例模式實現,類圖如圖5所示: ![](http://img.my.csdn.net/uploads/201303/14/1363225871_6194.jpg) 圖5 享元模式和單例模式實例類圖 在圖5中,DBObjectSynchronizerFlyweightFactory充當數據庫對象同步執行者的享元工廠,同步對象執行類DBObjectSynchronizer充當抽象享元,其間接子類OracleDBlinkDBSynchronizer、OracleTableDBSynchronizer等充當具體享元(由于篇幅問題,未將所有數據庫對象類一一列出)。 在實現DBObjectSynchronizerFlyweightFactory時使用了單例模式(餓漢式單例),其代碼片段如下所示: ``` public class DBObjectSynchronizerFlyweightFactory { private static DBObjectSynchronizerFlyweightFactory instance = new DBObjectSynchronizerFlyweightFactory(); private Map<String, DBObjectSynchronizer> map = new HashMap<String, DBObjectSynchronizer>(); private DBObjectSynchronizerFlyweightFactory(){ } public static DBObjectSynchronizerFlyweightFactory getInstance(){ return instance; …… } ``` 4. 觀察者模式 在數據庫同步系統中,用戶可以自行決定需要同步哪些對象,需要同步的DBObjectSynchronizer子類對象將注冊到DBSynchronizeManager中,DBSynchronizeManager類的代碼片段如下所示: ``` public abstract class DBSynchronizeManager{ …… public void attachDBSynchronizer(DBObjectSynchronizer dbSynchronizer) { synchronizers.add(dbSynchronizer); } public void detachDBSynchronizer(DBObjectSynchronizer dbSynchronizer) { synchronizers.remove(dbSynchronizer); } public abstract void executeSyn() throws Exception; } ``` 其中attachDBSynchronizer(DBObjectSynchronizerdbSynchronizer)為注冊方法,detachDBSynchronizer(DBObjectSynchronizerdbSynchronizer)為注銷方法,executeSyn()為抽象的通知方法,其子類OracleDBSynchronizeManager為executeSyn()方法提供了具體實現,類圖如圖6所示: ![](http://img.my.csdn.net/uploads/201303/14/1363225903_6539.jpg) 圖6 觀察者模式實例類圖 在數據庫同步時,如果DBSynchronizeManager的executeSyn()方法被調用,將遍歷觀察者集合,調用每一個DBObjectSynchronizer對象的executeSyn()方法和compileDBObject()方法,此時DBSynchronizeManager充當抽象觀察目標,OracleDBSynchronizeManager充當具體觀察目標,DBObjectSynchronizer充當抽象觀察者,OracleTableDBSynchronizer充當具體觀察者。 5. 模板方法模式 在執行同步時,OracleDBSynchronizeManager的executeSyn()方法將依次調用synDBObject()和compileDBObject()方法,并在這兩個方法中分別調用DBObjectSynchronizer的processSyn()和compile()方法,在OracleDBSynchronizeManager的子類中可以覆蓋synDBObject()和compileDBObject()方法,如圖7所示: ![](http://img.my.csdn.net/uploads/201303/14/1363225967_1800.jpg) 圖7 模板方法模式實例類圖 在圖7中,OracleDBSynchronizeManager充當抽象父類,其中定義了模板方法executeSyn(),NewOracleDBSynchronizeManager充當具體子類,其中OracleDBSynchronize Manager的代碼片段如下所示: ``` public class OracleDBSynchronizeManager extends DBSynchronizeManager { public void executeSyn() throws Exception { synDBObject(); compileDBObject(); } protected void synDBObject(){ for (DBObjectSynchronizer dbSynchronizer : synchronizers) { try { dbSynchronizer.processSyn(this); } catch (Exception e) { e.printStackTrace(); } } } protected void compileDBObject(){ for (DBObjectSynchronizer dbSynchronizer : synchronizers) { try { dbSynchronizer.compile(this); } catch (Exception e) { e.printStackTrace(); } } } } ``` 由于Oracle數據庫對象類型較多,而大部分對象的處理邏輯大同小異,只有少部分對象類型同步結構后需要重新編譯,因此在設計DefaultOracleObjectSynchronizer類時也可以使用模板方法模式,在其中定義一個鉤子方法getCompileable(),由子類決定是否要調用編譯邏輯,代碼片段如下所示: ``` public class DefaultOracleObjectSynchronizer extends DBObjectSynchronizer { ...... public void compile(DBSynchronizeManager dbSynchronizeManager) throws Exception { if (getCompileable()){ Database destDB = dbSynchronizeManager.getDestDB(); String[] compileObjs = findAllObjects(destDB); int iLen = compileObjs.length; for (int i = 0; i < iLen; i++) { compileObject(destDB, compileObjs[i]); } } } ...... } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看