<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无码免费高潮喷水| 久久综合久久综合亚洲| 亚洲国产老鸭窝一区二区三区 | 亚洲三级电影网址| vvvv99日韩精品亚洲| 最近中文字幕mv免费高清视频7| 久久国产精品一区免费下载| 一级视频在线免费观看| 男人的天堂av亚洲一区2区| 国产a v无码专区亚洲av| 日韩精品免费一区二区三区| 99爱在线精品免费观看| 日本免费一区二区三区四区五六区| 亚洲综合小说久久另类区| 亚洲国产a∨无码中文777| 亚洲人成人无码网www国产| 国产乱弄免费视频| 免费涩涩在线视频网| 国产1024精品视频专区免费| 国产精品久久永久免费| 91香蕉在线观看免费高清| 日本免费人成视频在线观看| 99久久免费看国产精品| 一区二区三区福利视频免费观看| 久久亚洲免费视频| 99久久精品国产免费| 香港a毛片免费观看| 在线人成精品免费视频| 57pao一国产成视频永久免费| 日韩内射激情视频在线播放免费| 亚洲视频在线免费观看| 日本免费一区二区三区| 4455永久在线观免费看| 久久久www成人免费毛片| 最近中文字幕mv免费高清视频7| 最近中文字幕无吗高清免费视频| 白白国产永久免费视频| 九月婷婷亚洲综合在线|