構造器參數太多怎麼辦?java
用 builder 模式,用在數據庫
一、5 個或者 5 個以上的成員變量數組
二、參數很少,可是在將來,參數會增長安全
Builder 模式:架構
屬於對象的建立模式,通常有工具
個),2)返回產品的方法性能
對於客戶端,建立導演者和具體建造者,並把具體建造者交給導演者,而後由客戶端通知導演者操縱建造者進行產品的建立。ui
在實際的應用過程當中,有時會省略抽象建造者和導演者。spa
不須要實例化的類應該構造器私有設計
如,一些工具類提供的都是靜態方法,這些類是不該該提供具體的實例的。能夠參考 JDK
中的 Arrays。
不要建立沒必要要的對象
1. 避免無心中建立的對象,如自動裝箱
2. 能夠在類的多個實例之間重用的成員變量,儘可能使用 static。
可是,要記住,是不要建立沒必要要的對象,而不是不要建立對象。
對象池要謹慎使用,除非建立的對象是很是昂貴的操做,如數據庫的鏈接,巨型對象等
等。
避免使用終結方法
finalizer 方法,jdk 不能保證什麼時候執行,也不能保證必定會執行。若是有確實要釋放的資源
應該用 try/finally。
使類和成員的可訪問性最小化
編寫程序和設計架構,最重要的目標之一就是模塊之間的解耦。使類和成員的可訪問性最
小化無疑是有效的途徑之一。
使可變性最小化
儘可能使類不可變,不可變的類比可變的類更加易於設計、實現和使用,並且更不容易出
錯,更安全。
經常使用的手段:
不提供任何能夠修改對象狀態的方法;
使全部的域都是 final 的。
使全部的域都是私有的。
使用寫時複製機制。帶來的問題:會致使系統產生大量的對象,並且性能有必定的影響,
須要在使用過程當中當心權衡。
複合優先於繼承
繼承容易破壞封裝性,並且會使子類的實現依賴於父類。
複合則是在類中增長一個私有域,引用類的一個實例,這樣的話就避免了依賴類的具體實
現。
只有在子類確實是父類的一個子類型時,才比較適合用繼承。
接口優於抽象類
java 是個單繼承的,可是類容許實現多個接口。
因此當發生業務變化時,新增接口,而且須要進行業務變化的類現新接口便可。可是抽象
類有可能致使不須要變化的類也不得不實現新增的業務方法。
在 JDK 裏經常使用的一種設計方法是:定義一個接口,聲明一個抽象的骨架類實現接口,骨架
類類實現通用的方法,而實際的業務類能夠同時實現接口又繼承骨架類,也能夠只實現接
口。
如 HashSet 實現了 implements Set 接口 可是又 extends 類 AbstractSet,而
AbstractSet 自己也實現了 Set 接口。其餘如 Map,List 都是這樣的設計的。
可變參數要謹慎使用
可變參數是容許傳 0 個參數的
若是是參數個數在 1~多個之間的時候,要作單獨的業務控制。
看代碼
返回零長度的數組或集合,不要返回 null
方法的結果返回 null,會致使調用方的要單獨處理爲 null 的狀況。返回零長度,調用方可
以統一處理,如使用 foreach 便可。
JDK 中也爲咱們提供了 Collections.EMPTY_LIST 這樣的零長度集合
優先使用標準的異常
要儘可能追求代碼的重用,同時減小類加載的數目,提升類裝載的性能。
經常使用的異常:
IlegalAraumentException -- 調用者傳遞的參數不合適
lllegalStateException – 接收的對象狀態不對,
NullPoint
UnsupportedOperationException –不支持的操做
通用程序設計
用枚舉代替 int 常量
聲明的一個枚舉本質就是一個類,每一個具體的枚舉值就是這個枚舉類的實例。
枚舉更多做用,看代碼。
將局部變量的做用域最小化
最小化的好處,減少局部變量表的大小,提示性能;同時避免局部變量過早聲明致使不正
確的使用。
精確計算,避免使用 float 和 double
可使用 int 或者 long 以及 BigDecimal