-
2004-03-03
读《Effective Java》-笔记1
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://pcmanlin.blogbus.com/logs/109603.html
《Effective Java》阅读笔记-1
Chapter 2 创建和销毁对象
全文:
Item1:考虑使用静态工厂方法代替类的构造器
一个类的静态工厂方法可以用于返回一个类的实例。
优点:
1) 静态工厂方法,它可以拥有自己的名字,不同于构造器。
a) 构造器的参数并不能构描述出返回的对象,而一个命名良好的静态工厂方法便于客户使用这个类,同时也利于阅读代码。
b) 一个类的构造器只有一个指定的签名,虽然不同的参数型别顺序也可以区别不同的构造器,但是这不利于API的使用,不提倡。
c) 静态工厂方法拥有自己的名字
所以,如果出现使用多个相同签名的构造器的情况,可以考虑使用静态工厂方法,静态工厂方法的命名可以明显标识出它们之间的不同。
2) 在调用静态工厂方法时,不同于构造器,不需要每次创建一个新对象。
a) 使用静态工厂方法时,允许不变模式的类使用预先创建好的实例或者是在这些类创建时,将它们的实例缓冲起来(加入实例池),以供重复使用,而不需要重复创建对象,这种方式可以大幅度提高请求大量等价对象时的系统性能,尤其是在创建对象时消耗资源比较多的时候。
b) 重复调用返回相同对象的静态工厂方法,可以严格控制在某一给定时刻存在的实例。
i. 确保类实现单例模式
ii. 允许确保不变模式的类没有两个相同的实例存在,也就是,只有在(a==b)的情况下,a.equals(b)才成立,每次比较都可以直接使用==进行比较,这样可以带来性能的提升。
3) 静态工厂方法可以返回指定类型的子类
a) 可以隐藏具体实现的类,形成一个紧凑的API,这都基于一个基于接口的框架,静态工厂方法返回这个接口作为返回类型的根类。Collections框架中,大量使用了静态工厂方法(见Collections框架分析)。
b) 由静态工厂方法返回的对象可能是非公有的,而且返回对象的类有可能会随着传递给静态工厂方法的参数不同而不同。
c) 静态工厂方法可以返回指定返回类型的子类,这样可以增强程序的可扩展性。
d) 静态工厂方法返回的对象所属的类,在编写包含该静态工厂方法的类时可以并不存在,从而可以成为服务提供者框架(service provider framework,指这样一个系统:提供者为框架的用户提供了多个API实现,框架必须提供一种机制来注册这些实现,以便用户能够使用它们,框架的客户直接使用API而无需关心使用的是哪个实现)的基础。
缺点:
1) 一个类没有了public或者是protected的构造器就无法被继承
2) 静态工厂方法无法很轻易的同其他静态方法区分开来
a) valueOf()
该方法返回的实例与它的参数具有相同的值,常用作类型转换操作符。b) getInstance()
返回的实例是由方法的参数来描述的,但不能够说与参数具有相同的值。在提供者框架中这个名字使用的很普遍。随机文章:
Struts中的Action类 2004-04-05Struts 控制器 2004-04-05读《Effective Java》-笔记7 2004-04-05读《Effective Java》-笔记6 2004-04-04读《Effective Java》-笔记5 2004-03-07
收藏到:Del.icio.us








评论