Effect Java

創(chuàng)建和銷毀對象

  • 靜態(tài)工廠方法代替構(gòu)造器
    • 優(yōu)勢1 有方法名
    • 不必要每次調(diào)用都創(chuàng)建一個對象
    • 可以返回原類型的任意子類
Ball.newBasketball()
Ball.newFootball()
  • 遇到多參數(shù)的對象可用考慮使用Builder
  • 單例
  • 內(nèi)存泄漏
    • 棧等自管理內(nèi)存的對象,引用對象彈出時也要自行釋放相關(guān)對象
    • 緩存,使用若引用
    • 監(jiān)聽器和回調(diào)注入

Object的方法

  • 重寫equals必須重寫hashCode:相等的對象必須具有相同的散列碼
  • 總是重寫toString

類與接口

  • 使可變性最小化

    • 不要提供任何會修改對象狀態(tài)的方法
      • 使用狀態(tài)模式來解決狀態(tài)修改問題
    • 保證類不會被擴(kuò)展
      • 避免粗心的子類破壞類的不可變行為
    • 使用所有域都是final
      • 出于線程安全考慮
    • 使所有域都成為私有
      • 域通過
    • 確保任何可變組件的互斥訪問
      • 即線程安全。可變組件,不能允許同時讀寫
  • 復(fù)合優(yōu)于繼承

    • 打破了封裝性,子類依賴于超類的實(shí)現(xiàn),除非這個超類是專門為了擴(kuò)展而設(shè)計(jì)的,否則超類的實(shí)現(xiàn)細(xì)節(jié)發(fā)生了改變,子類哪怕沒有任何的修改,都可能受到影響
    • 如果一個子類a繼承了一個超類b,必須滿足了a is b這樣的條件才是合理的,如果a只是b的一個擴(kuò)展,只是部分功能依賴了b的實(shí)現(xiàn),那就不應(yīng)該使用繼承
    • 要么為繼承而設(shè)計(jì),要么禁止繼承
    • 繼承暴露了過多的超類實(shí)現(xiàn)細(xì)節(jié)。
  • 接口優(yōu)于抽象類

    • 現(xiàn)有的類很容易被更新,來實(shí)現(xiàn)新的接口
    • 接口是定義混合類型的李響選擇
    • 接口允許我們構(gòu)造非層次結(jié)構(gòu)的類型框架
  • 類層次優(yōu)于標(biāo)簽類

    • 標(biāo)簽類是指用某個type來代表該對象是某種特定的對象
    • 改不如增
  • 函數(shù)對象表示策略

    • 類似于函數(shù)式編程
  • 枚舉

    • EnumSet代替位域
    • EnumMap代替index索引
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容