静态工厂方法的优势
- 静态工厂方法与构造器不同的第一大优势在于,它们有名称。
- 静态工厂方法与构造器不同的第二大优势在于,不必在每次调用天它们的时候都创建一个新对象。
- 静态工厂方法与构造器不同的第三大优势在于 ,它们可以返回原返回类型的任何子类型的对象。
- 静态工厂方法的第四大优势在于,所返回的对象的类可以随着每次调用而发生变化,这取决于静态工厂方法的参数值。
- 静态工厂方法的第五大优势在于,方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以不存在。
静态工厂方法的劣势
- 静态工厂方法的主要缺点在于,类如果不包含公有的或受保护的构造器,就不能被子类化。
- 静态工厂方法的第二个缺点在于,程序员很难发现它们。
# from---类型转换方法,它只有单个参数,返回该类型的一个相对应的实例,例如:
Date d = Date.from(instant);
# of---聚合方法,带有多个参数,返回该类型的一个实例,把它们合并起来,例如:
Set<Rank> faceCards = EnumSet.of(JACK, QUEEN, KING);
# valueOf---比from和of更繁琐的一种替代方法,例如:
BigInteger prime = BigInteger.valueOf(Integer.MAX_VALUE);
# instance或者getInstance---返回的实例是通过方法的(如有)参数来描述的,但是不能说与参数具有同样的值,例如:
StackWalker luke = StackWalker.getInstance(options);
# create或者newInstance---像instance或者getInstance一样,但create或者newInstance能够确保每次调用都返回一个新的实例,例如:
Object newArray = Array.newInstance(classObject, arrayLen);
# getType---像getInstance一样,但是在工厂方法处于不同的类中的时候使用。Type表示工厂方法所返回的对象类型,例如:
FileStore fs = Files.getFileStore(path);
# newType---像newInstance一样,但是在工厂方法处于不同的类中的时候使用。Type表示工厂方法所返回的对象类型,例如:
BufferedReader br = Files.newBufferedReader(path);
type---getType和newType的简版,例如:
List<Complaint> litany = Collections.list(legacyLitany);