Effective java經驗之談,類與介面

來源:互聯網
上載者:User

標籤:java   類   

本章描述的是,自己在做系統重構的時候,閱讀的章節,給自己在架構方面提供很大協助。總結出一些乾貨分享一下啊啊啊~~主要應用情境是編寫類與介面的時候需要注意的問題。每一章不一定按照順序更新。歡迎拍磚補充。


1.類與成員的存取權限最小化。Public staticfinal 如果指向的是對象(數組也是對象),那麼往往是錯誤的寫法,【private static final  A=指向該對象,同時採用public static final指向A.clone()(A的副本)】【private staticfinal  A=指向該對象,public static final List通過Collections.unmodifiableList(Arrays.asList(A))返回一個List列表,存放數組】

2.在公有類使用存取方法而非開放資料域,即公有類不應該暴露可變域。例如javabean採用setter/getter方法來操作對象資料域

3.複合優於繼承,將繼承類當做一個組件放到複合類中,通過一系列轉寄方法實現繼承類。然後通過外界函數調用此複合類。

4.要麼為繼承而設計,並提供文檔說明,要麼就禁止繼承。禁止繼承,可以通過final,以及構造器私人化完成。如果需要繼承,那麼需要考慮繼承類在任何時候不能調用該類可覆蓋的方法,可以機械消除可覆蓋方法的自用特性,通過將該覆蓋的方法代碼複製一份私人輔助方法。通過調用私人輔助方法消除自用特性。

5.介面優於抽象類別,抽象類別是為繼承而設計的,抽象類別演變比介面容易的多,例如,後期需要增加方法,抽象類別可以,但介面卻不行。

6.介面只用於定義類型,例如常量介面是對介面的不良使用。對於常量的設計,如果常量緊密關聯某一個類,將寫入該類內部。如果能看錯枚舉常量就用枚舉代替。否則將採用不可執行個體化的工具類來匯出這些常量。

7.類層次優於標籤類。如果代碼中存在根據某一個標誌位而產生不同的方法結果,也就是代碼模板,那麼需要考慮是否可以層次化代碼,將模板代碼提取為抽象類別中的方法進行類層次化。

8.用函數對象表示策略,函數對象作為參數傳遞到方法,代表著java中的“指標”,通過可以將函數對象採用介面的形式來封裝成策略,提供一個 “宿主類”通過一個公有的靜態方法來調用私人的靜態成員,該靜態成員就是此策略的實現方式。


在系統架構編碼的時候優先能統一為介面嗎?該類能使用複合嗎?該類是一定被繼承下去的,採用抽象類別可以嗎?其他類能繼承嗎?該類編寫前,X屬效能public嗎?大致就這些一般性思考方向。




Effective java經驗之談,類與介面

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.