第一条建议:利用静态工厂方法,不用构造器

</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、能够灵活的返回对象。  
④、常用的静态工厂方法的名称。







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值