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

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

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

    冰浪

    哥已不再年輕 - 堅定夢想,畢生追求!
    posts - 85, comments - 90, trackbacks - 0, articles - 3
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    畢業設計開發日記連載5:松耦合與工廠模式

    Posted on 2007-02-27 17:49 冰浪 閱讀(1739) 評論(4)  編輯  收藏 所屬分類: WEB開發

    ????? 在上一篇日記中我已經提到了松耦合,在一個類中,我們也盡量不要與別的對象發生緊密的聯系,讓一個類符合封裝性,類與類之間做到松耦合,避免牽一發而動全身。繼承最大的缺點就是打破封裝,所以組合優于繼承。在分層軟件結構中,我們也應該盡量做到各層之間松耦合,使某一層的改動對其它層的影響減到最小,這樣利于軟件功能修改和擴充,利于軟件的移植。

    上篇里,我提到定義 Dao 接口的目的最終是為了做到分層結構間松耦合,但僅利用上篇的方法并不能達到目的,比如在 CSUOA 里,在具體實現 Dao 實例如 OauserDao.class 是采用 Hibernate 進行,假如后來我覺得 Hibernate 的效率不夠高,想換成別的 ORM 框架如 JDO 進行改進呢?此時我要做的就是再寫一個有相應實例方法的 JdoOauserDao.class 類,它實現了 Dao 接口類,因此它也具有 Dao 接口類型。在業務層調用時,我需要將所有 Dao dao = new OauserDao(); 這樣的代碼替換成 Dao dao = new JdoOauserDao; 如果有大量的這樣的代碼存在,我也只能相應地一一替換。從這可以看出,這樣做使業務層與持久層之間的耦合非常高,維護的成本也相當高,而這是我所不希望的。

    一個設計精良的系統,在設計之前就必須考慮到將來的種種變動,并要提供可簡單實現的方案,這樣才不至將大量的人力物力浪費在將來的軟件維護上。

    為了實現這個目標,在 CSUOA 中就要用到設計模式中的工廠模式,它屬于創建模式。先來看我是如何實現這個工廠類的:

    //DaoFactory.class 工廠類

    public class DaoFactory{

    ?

    ? static final String OAUSER_DAO="OauserDao.class";

    ? static final String MAIL_DAO="MailDao.class";

    ? static final String MESSAGE_DAO="MessageDao.class";

    ?

    ? public static Dao getInstance(String daoNameStr){

    ??????? try{

    ???????????????????? Class c = Class.forName(daoNameStr);

    ???????????????????? dao=(Dao)c.newInstance();

    ????????????? }catch(Exception e){

    ???????????????????? e.printStackTrace();????????????

    ????????????? }

    ????????????? return dao;

    ? }

    }

    ?

    由上述代碼中可以看出,在這個工廠類里有一個靜態方法 getInstance() ,用于獲取具體的 Dao 實例類,而我們也看到其返回類型為 Dao 接口類型,而不是 OauserDao Dao 的實例類類型,這就為所有的 Dao 實例類對象提供了統一的獲取途徑。從這可以看出接口類的作用。如何使用這個工廠類呢?是這樣的: Dao dao = DaoFactory.getInstrance(“OAUSER_DAO”) ,而不是直接 new 一個對象出來了。而當要做出之前提出的改動時,我就只要將這個 DaoFactory 類里的 static final String OAUSER_DAO="OauserDao.class"; 改為 static final String OAUSER_DAO="JdoOauserDao.class"; 就可以了,業務層代碼基本上不需要改動,這就實現了業務層與持久層間的松耦合。

    在業務層里,我們始終只通過 Dao 接口進行操作,并沒有出現如 OauserDao 這樣代碼,好像不存在一樣,而且我們根本也不需要知道有這樣的類存在。從這里我們可以進一步體會接口的用法及其方便性。

    ?

    設計模式,在我接觸它之前,編寫程序從來不會考慮那么多,總認為要得到一個對象時, new 一個出來是天經地義的事,也根本不會考慮什么松耦合之類的問題。學習設計模式,能讓自己在面向對象編程思想上得到升華。

    評論

    # re: 畢業設計開發日記連載5:松耦合與工廠模式  回復  更多評論   

    2007-02-28 11:01 by DoubleHeart
    之所以你會有這種問題,就是因為你沒用Spring,如果你用了Spring的IoC、AOP后,你絕對不會再有這種無聊想法與功能需求了!!!

    說實話看了三篇你寫的東西后實在覺著你很弱,所以給你個建議,與其這么作,不如不作,對你今后所謂的工作提高幾乎沒有任何幫助!!!

    # re: 畢業設計開發日記連載5:松耦合與工廠模式  回復  更多評論   

    2007-03-14 10:59 by L
    同意。。干嘛不用spring。你自己的這些東西又過時又不合理。

    # re: 畢業設計開發日記連載5:松耦合與工廠模式  回復  更多評論   

    2007-03-16 11:43 by 冰浪
    我覺得學習是一個過程。
    如果一個剛學習jsp的人,他在試著按著自己的想法用jsp來做一個小程序時,你們是不是也覺得他很可笑,你們也許會說
    “為什么不用框架呢?你自己的這些東西又過時又不合理。”
    我要說明一點的是,我現在可以說是一個入門者,我現在所做的這些東西我也覺得沒什么不好。
    不過,謝謝各位的評論。

    # re: 畢業設計開發日記連載5:松耦合與工廠模式  回復  更多評論   

    2007-06-19 23:14 by ggyyleo
    樓上幾位說話真刻薄
    會幾個框架就了不起了?
    作者能寫出自己的想法本身就很不錯了
    主站蜘蛛池模板: 最近的2019免费中文字幕| 青青草国产免费国产是公开| 国产va在线观看免费| 亚洲综合熟女久久久30p| eeuss在线兵区免费观看| 亚洲av无码专区亚洲av不卡| 免费国产污网站在线观看不要卡| 久久不见久久见免费影院| 国产gv天堂亚洲国产gv刚刚碰| 乱爱性全过程免费视频| 精品亚洲综合久久中文字幕| 精品国产免费一区二区三区香蕉| 日韩午夜免费视频| 亚洲国产精品自在线一区二区| 日韩免费高清大片在线| 亚洲国产精品久久人人爱| 国产福利在线观看永久免费| 日韩一卡2卡3卡4卡新区亚洲| 男女一进一出抽搐免费视频| 四虎影视在线影院在线观看免费视频| 久久亚洲精品AB无码播放| 99精品一区二区免费视频| 亚洲一本之道高清乱码| 免费无码又爽又刺激网站| 免费v片在线观看无遮挡| A国产一区二区免费入口| 亚洲午夜精品一区二区| 国产h视频在线观看免费| 看全免费的一级毛片| 亚洲精品无码成人片久久| h视频在线免费看| 国产精品久久久久久亚洲影视| 成人免费午夜无码视频| 在线观看免费亚洲| 亚洲一区精品无码| 五月婷婷免费视频| 91大神亚洲影视在线| 欧洲美熟女乱又伦免费视频| 亚洲国产视频久久| 亚洲一区精品无码| 夭天干天天做天天免费看|