学解《Effective java》
2017-01-04 13:56
225 查看
自己理解不深不全,多多见谅
法则一:考虑用静态工厂方法代替构造器
类事前创建好一个静态对象,并通过静态方法(即静态工厂方法)返回该静态对象,避免用构造器多次创建。而且类可以仅提供该静态工厂方法,来替代构造器。
优势有三个:第一,现对于构造器使用函数参数列表,来指明返回实际被创建的对象,静态工厂方法更易描述。或者说静态创建对象用途更加专一,可以直接在名称上进行体现。【相对有构造器,静态工厂方法 hava a name】
第二,由于实例是静态的,可以事先创建好并缓存起来,避免每次调用时候不必要的重复创建。类似享元模式(flyweight模式,又称轻量级模式),享元模式,重复使用内存中已存在对象,降低资源的消耗。也由于实例是可控的,如果仅有一个实例,则可关联到singleton模式(单例模式),则符号==与.equals()函数使用上无区别,使用==替代.equals()对性能会有随提升。
第三,返回对象的灵活性更大,可返回其任意子类型。(应用方面偏向于接口,参见Collection),我理解的如下图所示,其中static实现类可nonpublic constructor class,甚至可以暂时不写
refers: Interfaces cannot hava static methods, so by convention, staitc factory methods for an interface named Type are put in a noninstantiable class name Types.
第四,创建参数化实例更加简便。例,Map<String, List<String>> map = new Map<String, List<String>>()可替代为Map<String, List<String>> map = Map.newInstance();
法则一:考虑用静态工厂方法代替构造器
类事前创建好一个静态对象,并通过静态方法(即静态工厂方法)返回该静态对象,避免用构造器多次创建。而且类可以仅提供该静态工厂方法,来替代构造器。
优势有三个:第一,现对于构造器使用函数参数列表,来指明返回实际被创建的对象,静态工厂方法更易描述。或者说静态创建对象用途更加专一,可以直接在名称上进行体现。【相对有构造器,静态工厂方法 hava a name】
第二,由于实例是静态的,可以事先创建好并缓存起来,避免每次调用时候不必要的重复创建。类似享元模式(flyweight模式,又称轻量级模式),享元模式,重复使用内存中已存在对象,降低资源的消耗。也由于实例是可控的,如果仅有一个实例,则可关联到singleton模式(单例模式),则符号==与.equals()函数使用上无区别,使用==替代.equals()对性能会有随提升。
第三,返回对象的灵活性更大,可返回其任意子类型。(应用方面偏向于接口,参见Collection),我理解的如下图所示,其中static实现类可nonpublic constructor class,甚至可以暂时不写
refers: Interfaces cannot hava static methods, so by convention, staitc factory methods for an interface named Type are put in a noninstantiable class name Types.
第四,创建参数化实例更加简便。例,Map<String, List<String>> map = new Map<String, List<String>>()可替代为Map<String, List<String>> map = Map.newInstance();
相关文章推荐
- JSP 30:<c:forEach/>的简单实例
- lightbox弹出窗口插件-弹出广告-兼容IE8和Chrome浏览器
- Package.json与Bower.json中的参数备忘
- C# 利用NPOI 实现Excel转html
- JSP往action传值乱码问题解决
- 学习JavaScript笔记
- JavaScript生成GUID的方法
- jsonp实现跨域的方法
- js把日期字符串转换成时间戳
- JS实现HTML中frameset浏览器全屏和退出全屏
- (二)ReactNatice命令总结
- 关于在node.js进入文件目录的问题
- json 的for in循环
- css居中的实现方法(包括水平居中和垂直居中)
- jQuery实现在鼠标滚动后导航栏保持固定
- Jquery网页元素里面的操作以及JSON
- Javascript中arguments对象的详解与使用方法
- JavaScipt 样式操作
- 使用KRPano资源分析工具强力加密KRPano项目(XML防破解,切片图保护,JS反调试)
- SpaceSniffer--磁盘空间分布分析工具