<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    設計模式學習筆記(三)—-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

    主站蜘蛛池模板: 亚洲精品无码av中文字幕| 亚洲中文无码av永久| 男人扒开添女人下部免费视频| 国产国产人免费视频成69堂| 亚洲成a人片77777老司机| 日本高清不卡aⅴ免费网站| 亚洲人成人无码网www电影首页| 日韩精品无码永久免费网站| 亚洲AV成人潮喷综合网| 一级黄色免费大片| 亚洲国产三级在线观看| 免费污视频在线观看| 亚洲蜜芽在线精品一区| 日韩版码免费福利视频| 亚洲欧洲无卡二区视頻| 四虎影视免费永久在线观看| 日亚毛片免费乱码不卡一区| 亚洲香蕉网久久综合影视| 亚洲国产精品免费视频| 亚洲国产高清美女在线观看 | 久久夜色精品国产亚洲AV动态图| 国产亚洲免费的视频看| 噜噜噜亚洲色成人网站∨| AV大片在线无码永久免费| 亚洲国产成人精品无码区二本 | 亚洲人成无码www久久久| A国产一区二区免费入口| 亚洲VA中文字幕无码一二三区| 99免费在线观看视频| 亚洲性无码AV中文字幕| 免费一级毛片一级毛片aa| 中文字幕视频免费在线观看| 久久久久亚洲AV无码专区体验| 我要看WWW免费看插插视频| 免费激情网站国产高清第一页| 亚洲精品午夜国产VA久久成人| 亚洲免费电影网站| 美女视频黄a视频全免费网站色| 日韩va亚洲va欧洲va国产| 免费看片在线观看| 亚洲精品国产日韩无码AV永久免费网|