_ 静态工厂方法比构造器的主要优点:_ 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方法