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

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

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

    posts - 32,  comments - 149,  trackbacks - 0

    概要
    Clients should not be forced to depend upon interfaces that they do not use.
    不能強迫用戶去依賴那些他們不使用的接口。換句話說,使用多個專門的接口比使用單一的總接口總要好。
    它包含了2層意思:
    - 接口的設計原則:接口的設計應該遵循最小接口原則,不要把用戶不使用的方法塞進同一個接口里。
      如果一個接口的方法沒有被使用到,則說明該接口過胖,應該將其分割成幾個功能專一的接口。
    - 接口的依賴(繼承)原則:如果一個接口a依賴(繼承)另一個接口b,則接口a相當于繼承了接口b的方法,那么繼承了接口b后的接口a也應該遵循上述原則:不應該包含用戶不使用的方法。
      反之,則說明接口a被b給污染了,應該重新設計它們的關系。

    如果用戶被迫依賴他們不使用的接口,當接口發生改變時,他們也不得不跟著改變。換而言之,一個用戶依賴了未使用但被其他用戶使用的接口,當其他用戶修改該接口時,依賴該接口的所有用戶都將受到影響。這顯然違反了開閉原則,也不是我們所期望的。

    下面我們舉例說明怎么設計接口或類之間的關系,使其不違反ISP原則。
    假如有一個Door,有lock,unlock功能,另外,可以在Door上安裝一個Alarm而使其具有報警功能。用戶可以選擇一般的Door,也可以選擇具有報警功能的Door。

    有以下幾種設計方法:

    ISP原則的違反例:


    方法一:
    在Door接口里定義所有的方法。圖:

    但這樣一來,依賴Door接口的CommonDoor卻不得不實現未使用的alarm()方法。違反了ISP原則。

    方法二:
    在Alarm接口定義alarm方法,在Door接口定義lock,unlock方法,Door接口繼承Alarm接口。

    跟方法一一樣,依賴Door接口的CommonDoor卻不得不實現未使用的alarm()方法。違反了ISP原則。

    遵循ISP原則的例:


    方法三:通過多重繼承實現

    在Alarm接口定義alarm方法,在Door接口定義lock,unlock方法。接口之間無繼承關系。CommonDoor實現Door接口,
    AlarmDoor有2種實現方案:
    1),同時實現Door和Alarm接口。
    2),繼承CommonDoor,并實現Alarm接口。該方案是繼承方式的Adapter設計模式的實現。
    第2)種方案更具有實用性。
    這種設計遵循了ISP設計原則。

    方法四:通過委讓實現

    這種方法其實是委讓方式的Adapter設計模式的實現。
    在這種方法里,AlarmDoor實現了Alarm接口,同時把功能lock和unlock委讓給CommonDoor對象完成。
    這種設計遵循了ISP設計原則。

    小結
    Interface Segregation Principle (ISP)從對接口的使用上為我們對接口抽象的顆粒度建立了判斷基準:在為系統設計接口的時候,使用多個專門的接口代替單一的胖接口。
    posted on 2009-03-28 14:17 chunkyo 閱讀(615) 評論(0)  編輯  收藏 所屬分類: 系統設計和設計模式
    <2009年3月>
    22232425262728
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    這個博客主要是關于java技術和開源技術,大家一起來進步了!

    常用鏈接

    留言簿(12)

    隨筆分類

    隨筆檔案

    文章分類

    收藏夾

    DotNet

    Java技術網站

    Linux VS Unix

    其他常去網站

    常光顧的BLOG

    文學類網站

    游戲類網站

    最新隨筆

    搜索

    •  

    積分與排名

    • 積分 - 196749
    • 排名 - 293

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲一区二区三区精品视频 | 亚洲AV福利天堂一区二区三| 高潮内射免费看片| 日韩在线a视频免费播放| 亚洲人成小说网站色| 最近最新中文字幕完整版免费高清| 亚洲成人福利在线| 1区2区3区产品乱码免费| 亚洲日本在线观看网址| 精品香蕉在线观看免费| 亚洲av一本岛在线播放| 日本免费福利视频| 日韩大片免费观看视频播放| 自拍偷自拍亚洲精品被多人伦好爽| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 亚洲精品福利在线观看| 波多野结衣在线免费观看| 亚洲一区二区三区高清在线观看 | 人人爽人人爽人人片av免费| 亚洲国产一成久久精品国产成人综合 | 亚洲日产2021三区在线 | 亚洲熟妇无码八V在线播放| 日本一道本高清免费| 一道本在线免费视频| 亚洲av鲁丝一区二区三区| 99久久综合国产精品免费| 国产尤物在线视精品在亚洲| 国产成人精品亚洲精品| 亚洲精品在线免费看| 亚洲乱码中文字幕在线| 久久久久亚洲AV成人网人人网站| 免费观看成人久久网免费观看| 亚洲制服丝袜一区二区三区| 日韩高清在线高清免费| 在线观看免费无码专区| 亚洲娇小性xxxx| 久久精品国产精品亚洲下载| 最近2018中文字幕免费视频| 日韩亚洲综合精品国产| 亚洲av无码不卡一区二区三区| 成人免费看片又大又黄|