</pre><p></p><h2><span style="font-size:18px"><strong>一、什么是静态工厂方法</strong></span></h2><p></p><p><span style="font-size:18px">返回该类实例的静态方法,与普通的工厂方法是不一样。</span></p><p><span style="font-size:18px">不同之处在于:</span></p><p><span style="font-size:18px">工厂方法:用来构造类的多个实例。</span></p><p><span style="font-size:18px">静态工厂方法:返回类的实例化对象。</span></p><p><span style="font-size:18px">举例:</span></p><p></p><pre name="code" class="java"><span style="font-size:18px;">public class Garage {
//创建静态工厂方法的形式。
public static Garage getInstance(){
return new Garage();
}
}</span>
当然这个方法毫无意义,只是为了演示。
二、静态工厂的优点、常见的例子、如何使用、何时使用
①、静态工厂能够拥有很清晰的方法名。
优点:当用户使用该类的时候,能够很清晰的选择构造方法
使用情形:假设我们现在要为一个类设定构造方法,发现我们需要创建4~5种的构造方法。
那么当我使用的时候,我怎么知道要需要用那种构造方法获取该类的实例。
这个时候,我们就可以使用静态工厂方法,清楚的写明,该方法的作用是什么。
②、不必每次调用的时候都创建一个新的对象。
优点:这可以很好的减少程序的开销。
使用情形:不需要频繁的创建该类的对象的时候,或者说该类的对象实例唯一的情况下。
示例:创建一个唯一的车库(单例模式)
<span style="font-size:18px;">public class Garage {
//第一步:声明该类的静态实例
private static Garage garage;
//第四步:发现用户可以直接通过new Garage()来创建实例。因为class提供默认的构造方法。
//但是我们需要的是通过静态工厂方法创建实例,所以创建私有的构造方法,让class不提供默认的构造器
private Garage(){}
//第二步创建静态工厂方法的形式。
public static Garage getInstance(){
//第三步:判断车库是否被创建,如果被创建了就返回实例,如果没有创建则创建车库
if (garage == null){
garage = new Garage();
}
return garage;
}
}
</span>
③、可以返回该方法返回类型的子类对象。
意思是:比如鸟的静态工厂返回的是Bird这个返回类型,但是Bird有很多子类,比如说麻雀。这就是返回子类对象。
当然,返回子类对象只是一种。我们可以返回 非公开的对象。可以随着类的变化而返回不同的实例。
优点:大大增加了返回类型灵活性。
④、使用类型参数推断
优点:
我们原先写HashMap<K,V> map = new HashMap<K,V>();
通过类型参数推断:
我们可以这样写
public class Test {
public static <K,V> HashMap<K, V> getHashMap(){
return new HashMap<K,V>();
}
public static void main(){
HashMap<String, Integer> map = getHashMap();
}
}
这样就减少了一部分代码。
类型参数推断,还可以用于强制转型的问题(Android):
原先要这么写: TextView tv = (TextView)findViewById(id);
现在可以这样写
public static V View getViewById(int id){
return (V)findViewById(id);
}
public static void main(){
TextView tv = getViewById(R.id.text);
}这样就可以不用写强制转型的代码了。
静态方法惯用的名称:
①、valueOf():将其他类型转换为与该类同等类型的值。 总而言之就是类型转换。
②、getInstance():保证获取的对象,是唯一的实例。
③、newInstance():保证获取的对象,都是不同实例的
总结:①、什么是静态工厂方法 ②、与工厂方法的区别是什么。
③、静态工厂方法的优点及使用1、名称 (优点、如何使用、何时使用) 2、防止重复创建实例 3、类型参数推断 4、能够灵活的返回对象。
④、常用的静态工厂方法的名称。
转载请注明原文地址: https://ju.6miu.com/read-1295289.html