_ 靜態工廠方法比構造器的主要優點:_ 1.靜態工廠方法有名稱 2:不比每次調用他們的時候建立一個新對象 3:他們能夠返回類型的任何子類型的對象。4:在建立參數化類型實例的時候,他們使代碼變的更加簡潔。ide
_ 靜態工廠方法比構造器的主要缺點:_ 1:類若是不含有公有的或者守保護的構造器,就不能被子類化。2:他們與其餘的靜態方法實際上沒有任何區別ui
package net.newcapec.effective.test; /** * Created by lsq on 2017/3/9. */ public class User { private String id; private String name ; private String age; private String add; @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age='" + age + '\'' + ", add='" + add + '\'' + '}'; } public User builderName(String name) { this.name = name; return this; } public User builderAge(String age) { this.age = age; return this; } public User builderAdd(String add) { this.add = add; return this; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getAdd() { return add; } public void setAdd(String add) { this.add = add; } public static void main(String[] args) { User u= new User().builderAdd("洛陽").builderAge("12").builderName("LSQ"); System.out.println(u.toString()); } }
若是類的構造器或者靜態工廠方法中具備多個參數,設計這種類的時候,Builder模式就是一種不錯的選擇。this
比較嚴謹的單例會包含readResolve方法設計
public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis(){}; public static Elvis getInstance(){ return INSTANCE; } //防止反序列化建立新的對象 private Object readResolve(){ return INSTANCE; } }
單元素的枚舉類型已經成爲實現Singlenton的最佳方法。code
public enum Elvis { INSTANCE; public void leaveTheBuilding() { System.out.println("Whoa baby, I'm outta here!"); } }
四: 經過私有構造器強化不可實例化的能力對象
五: 避免建立沒必要要的對象get
六: 消除過時的對象引用hash
七: 避免使用終結方法class
八: 覆蓋equals時請遵照通用的約定test
九: 覆蓋equals總要覆蓋hashCode
十: 始終要覆蓋toString方法