java利用构建器来创建实例而不是构造器
一个类中
重载多个构造器
静态工厂方法与构造器不同的
第一大优势为:他们有名称
第二大优势为:不必每一次调用他们的时候创建一个新对象
第三大优势为:他们可以返回原返回类型的任何子类型的对象
第四大优势为:所返回的对象的类随着每次调用发生变化,这取决于静态方法的参数值
下面是静态工厂方法的一些惯用名称
1)from---------------------类型转换方法
Date d = Date.from(instant)
2)of------------------------聚合方法,带有多个参数,返回该类型的一个实例,把他们合并起来
Set faceCard = EnumSet.of(JACK,QUEEN,KING)
3)valueOf-----------------比前两个更繁琐的方法BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE)
…
一个构造器中有多个参数时
简而言之,重叠构造器模式可行,但当有更多的参数是,客户端的代码会看起来非常糟糕。
javaBean看起来强于上述的重叠构造器模式,但同时也会带来多线程下不安全的问题
那么,我们的构建器出场了。
Main.java
public class Main
{
public static void main(String[] args)
{
//初始化一个NutritionFacts实例,一定要最后调用build()方法去调用NutritionFacts类的构造器去实例化NutritionFacts的对象
NutritionFacts cocaCola = new NutritionFacts.Builder(120,200).calories(1).carbohydrate(22).build();
//并且参数由客户端调用时决定,并不是一定要固定输入参数,改进写重载很多构造器给用户带来麻烦
//javaBean改进了重载一大堆构造器的问题,却也带来了线程不安全的问题
NutritionFacts cocaCola1 = new NutritionFacts.Builder(223,233).build();
}
}
NutritionFacts.java