获取类的实例有两种方法:框架
1. 提供一个公有的构造器(最经常使用)。ide
2. 提供一个公有的静态工厂方法(static factory method)。spa
// 静态工厂方法示例 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; }
静态工厂方法的优点:.net
1. 有名称。当一个类须要多个带有相同签名(方法签名 = 方法名 + 参数列表)的构造器时,就用静态工厂方法代替构造器,而且慎重选择名称以便突出它们之间的区别。code
2. 没必要每次调用它们的时候都建立一个新对象。对象
3. 能够返回原返回类型的任何子类型的对象。blog
4. 在建立参数化类型实例的时候,使代码变得更加简洁。类型推导:好比HashMap<K,V>里的K和V就是参数,若是参数一多,每次new的时候都要写一遍,显得冗长。get
静态工厂方法的缺点:it
1. 类若是不含公有的或者受保护的构造器,就不能被子类化。io
2. 与其余的静态方法实际上没有任何区别。
课外连接:服务提供者框架。有三个重要组件:
1. Service Interface:提供者实现。
2. Provider Registration API:注册有哪些provider。
3. Service Access API:调用provider的service。
一个可选组件:Service Provider Interface。