[EJ读书笔记]第1条:考虑用静态工厂方法替代构造器
2015-09-19 17:12
260 查看
优点
1、有名称可以通过方法名自注释
2、可复用这个讲一个例子,单例
3、返回值协变可以让这个返回更优雅从容(协变是指你可以返回应该返回的类型的子类,输入的参数同理)
4、更简洁利用静态工厂方法隐藏了二次提供参数,如下:
可以写成这样:
缺点
a、不能被子类化 就是说你这个实现了很多静态方法的类,如果是私有的就不能被子类化,感觉这是废话?大部分静态方法的工厂类都是私有的构造函数。
b、不明显 静态工厂方法和其他静态方法实际上没有任何区别,在API文档中也没有特别标出。
valueOf
of
getInstance
newInstance
getType
newType
1、有名称可以通过方法名自注释
2、可复用这个讲一个例子,单例
3、返回值协变可以让这个返回更优雅从容(协变是指你可以返回应该返回的类型的子类,输入的参数同理)
4、更简洁利用静态工厂方法隐藏了二次提供参数,如下:
Map<String, List<String>> m = new ConcurrentHashMap<String, List<String>>();
可以写成这样:
Map<String, List<String>> m = ConcurrentHashMap.newConcurrentHashMapInstance(); public static <K, V> ConcurrentHashMap<K, V> newConcurrentHashMapInstance() { return new ConcurrentHashMap<K, V>(); }
缺点
a、不能被子类化 就是说你这个实现了很多静态方法的类,如果是私有的就不能被子类化,感觉这是废话?大部分静态方法的工厂类都是私有的构造函数。
b、不明显 静态工厂方法和其他静态方法实际上没有任何区别,在API文档中也没有特别标出。
valueOf
of
getInstance
newInstance
getType
newType
相关文章推荐
- C++ 类成员函数作为参数
- Java基础知识强化34:String类之String类的转换功能
- Struts2:类型转换详解
- 单片机前后台系统的优缺点
- 全站压缩过滤器
- Ubuntu配置jdk和Android sdk环境变量
- java.lang.IllegalArgumentException: Mapped Statements collection does not....
- BusyBox init工作流程
- android4.x 增加一个新按键&&修改android默认语言
- 从H264/H265码流中获取宽、高及帧率
- windos8.1 GNUstep环境搭建,objective-c
- Netty
- C#创建和初始化类
- Wireshark - 过滤规则
- virtual 析构函数作用
- 磁盘误格式化
- Java编程思想第四版读书笔记——第三章 操作符
- 关于JavaScript中替换字符串需要注意的问题
- Java内存回收机制(转)
- 【转载】vim格式对齐命令