設計模式學習筆記(三)—-Strategy策略模式

          Posted on 2007-11-23 18:43 flustar 閱讀(1103) 評論(0)  編輯  收藏 所屬分類: Design Patterns

          GOF《設計模式》一書對Strategy模式是這樣描述的:

              定義一系列的算法,把他們一個個封裝起來,并且使它們可相互替換。Strategy模式使算法可獨立于使用它的客戶而變化。

              Strategy模式以下列幾條原則為基礎:

          1) 每個對象都是一個具有職責的個體。

          2) 這些職責不同的具體實現是通過多態的使用來完成的。

          3) 概念上相同的算法具有多個不同的實現,需要進行管理。

          下面我將通過一個實例來說明它的具體使用,這個例子是關于數據庫連接的。代碼如下:

          interface DatabaseStrategy{

              public void process();

          }

          class MysqlDBStrategy implements DatabaseStrategy{

              public void process() {

                 System.out.println("處理Mysql數據庫連接");

              }

          }

          class OracleDBStrategy implements DatabaseStrategy{

              public void process() {

                 System.out.println("處理Oracle數據庫連接");

              }

          }

          class DataBaseManager{

              public void process(DatabaseStrategy dbStrategy){

                 dbStrategy.process();

              }

          }

          publicclass StrategyClient {

              public static void main(String[] args) {

                 MysqlDBStrategy mysql=new MysqlDBStrategy();

                 DataBaseManager manager=new DataBaseManager();

                 manager.process(mysql);

                 OracleDBStrategy oracle=new OracleDBStrategy();

                 manager.process(oracle);

              }

          }

              在我們的實際編程中經常會遇到系統要連接的數據庫可能不只一種,如果采用傳統的方法,即修改連接Url的方法,這種方法確實可行,但是有一個問題要經常修改源代碼,不利于以后的維護,那么有沒有一種更好的方法呢?答案是有,使用Strategy模式,首先定義一個連接數據庫通用的接口(在上面的例子中是DatabaseStrategy),然后再定義實現該接口的具體類(MysqlDBStrategy、OracleDBStrategy),在這些具體類,實現具體的邏輯。最后再定義一個管理數據庫連接的類(DataBaseManager),它的內部有一個方法可以接受具體類實例的參數。我們可以看到這個參數是DatabaseStrategy類型的,也就是說它可以接受任何一個實現了DatabaseStrategy接口的類的具體實例(這里運用了對象替換機制,多態的一種),從而完成數據庫連接的處理。如果我們還需要處理另外一種數據庫如sqlserver,我們只需要建立一個SqlserverDBStrategy類實現DatabaseStrategy接口,把該類的實例傳給DatabaseManager的process方法即可。

              小結:Strategy模式是一種定義一系列算法的方法。概念上看,這些算法完成的都是相同的工作,只是實現不同。

          posts - 146, comments - 143, trackbacks - 0, articles - 0

          Copyright © flustar

          主站蜘蛛池模板: 昌江| 古浪县| 通江县| 靖边县| 南和县| 屏东县| 巴彦县| 临夏市| 兰西县| 陇南市| 宝坻区| 阳城县| 芜湖县| 沂源县| 昌邑市| 永定县| 南皮县| 贡山| 炉霍县| 苍溪县| 宜都市| 建阳市| 滦南县| 合江县| 龙岩市| 循化| 镇原县| 兴宁市| 报价| 合山市| 台北县| 长葛市| 门头沟区| 孟津县| 山阴县| 漯河市| 耒阳市| 庄浪县| 若羌县| 特克斯县| 牡丹江市|