重構手法64:Extract Interface (提煉介面)

來源:互聯網
上載者:User

若干客戶使用類介面中的同一子集,或者2個類的介面部分相同。將相同的子集提煉到一個獨立介面中。

動機:類之間彼此互用的方式有若干種。“使用一個類”通常意味著用到該類的所有責任區。另一種情況是,某一組客戶只使用類責任區中的一個特定子集。再一種情況是,這個類需要與所有協助處理某些特定請求的類合作。

       對於後2種情況,將真正用到的這部分責任分離出來通常很有意義,因為這樣可以使系統的用法更清晰,同時也更容易看清系統的責任劃分。如果新的類需要支援上述子集,也比較能夠看清子集內有些什麼東西。

       在許多物件導向語言中,這種責任劃分是通過多繼承來實現的。在c#中可以運用介面來詔示並實現上述需求。

       Extract Subclass (提煉子類)和Extract Interface (提煉介面)之間有些相似之處。Extract Interface (提煉介面)只能提煉共通介面,不能提煉共通代碼。使用Extract Interface (提煉介面)可能造成難聞的“重複”壞味道,幸而你可以運用Extract Class(提煉類)先把共通行為放進一個組件中,然後將工作委託給該組件,從而解決這個問題。如果有不少共通行為,Extract Superclass (提煉超類)會比較簡單,但是每個類只能有一個超類。

       如果某個類在不同環境下扮演截然不同的角色,使用介面就是個好主意。你可以針對每個角色以Extract Interface (提煉介面)提煉出相應介面。另一種可以用Extract Interface (提煉介面)的情況是:你想要描述一個類的外部依賴介面。如果你打算將來加入其它種類的服務物件。只需要求它們實現這個介面即可。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.