effective java 学习笔记(一) 2012-4-24

刚开始看这本书我就确定是本好书,因为第一条我就没看明白奋斗

我把原因归罪于隔壁工位运维的孩子们大笑,打电话的声都快盖过我耳机里的声音了。

后来看了下jdbc的源码,才真正把文字和思想还有实现联系起来。


创建和销毁对象:

第一条:考虑用静态工厂方法代替构造器


书里一共列出了四大优势,让我眼前一亮的是第三个:“可以返回原返回类型的任何子类型的对象”


以jdbc为例,就是把各种“Connection服务接口类型的示例放到一个“容器”里,然后提供一个接口(静态工厂方法),客户端通过连接串就可以得到相应的connection。

这样就可以解耦出来了,让使用Connection实例的时候,无需关心实现Connection的类如何变化。


以个人愚见分析一下源码中的模型和过程:

下面是一段我们熟的不能再熟的得到连接的代码:


/**

Connection:服务接口

DriverManager.getConnection():静态工厂方法,返回值Connection

**/

Class.forName("com.hxtt.sql.access.AccessDriver");
String strurl = "jdbc:access:/D:/DATA.MDB";
con = DriverManager.getConnection(strurl);


首先,Class.forName 方法用JNI的方式,根据“com.hxtt.sql.access.AccessDriver”调用出驱动的class

然后,DriverManager.getConnection 的执行:

1、比较driver的name,如果不同抛出异常

2、调用driver中的connect方法,返回参数为:Connection,如果为null则抛出异常

3、返回Connection

这样即使Connection的类结构有任何变化,客户端也不用去做任何的修改。


静态工厂方法的其他优势:

(1)静态工厂方法有名称。同一个类的不同构造器只是在有无参数、参数长短和顺序的不同。而静态工厂方法可以根据用法自定义名称。

(2)在创建参数化类型实例的时候,可以简化代码。

如Map<String , List<String>> m=new HashMap<String, List<String>>();   //构造器需要两次提供类型参数

Map<String , List<String>> m = HashMap.newInstance();  //静态工厂方法利用了类型推导,变压器替你找到参数类型

 (3)不必在每次调用静态工厂方法的时候都创建一个新的对象。

静态工厂方法能够为重复的调用返回相同的对象。  如果去报不会纯真两个相等的实例,即当且仅当a==b的时候才有a.equals(b)为true,那么可以利用a=b来代替a.equals(b)来提高性能。











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值