創(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
- 出于線程安全考慮
- 使所有域都成為私有
- 域通過
- 確保任何可變組件的互斥訪問
- 即線程安全。可變組件,不能允許同時讀寫
- 不要提供任何會修改對象狀態(tài)的方法
-
復(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索引