静态方法代替构造器-effectiveJava读书笔记
来源:互联网 发布:怎么注册网络直播公司 编辑:程序博客网 时间:2024/05/17 01:06
一般可能用到的地方:
1. Boolean.valueOf(true)
2. BigInteger.probablePrime(int length, Random)
3. 单例 通常方法为getInstance
这里还有些其他的习惯用法,也总结一下:
valueOf() 通常用来做类型转换,或者封装
of valueOf的简洁形式
getInstance 单例
newInstance 每次调用返回不同的实例
getType 与getInstance类似,但是是工厂方法的形式,要获取的类不是自己,一般是一个接口的实现,但是接口不能含有static方法,于是把接口的这种需求放到一个接口s的类中,加入static类型来获得接口的实现。
newType 参照getType和newInstance的定义。
4. 工厂
在没有spring之前,通常是使用静态方法工厂来进行实例管理的,比如业务场景,保险公司的系统要根据不同的险种来计算赔款,可能就会用如下的代码结构:
interface InsuranceClaimCalculateAble{public double calculate(double realPay);}class InsuranceClaimCalculateFactory{private final static int TYPE_SANZHE = 0;private final static int TYPE_JIAOQIANG = 1;public static InsuranceClaimCalculateAble getCalculateByType(int type){if(TYPE_SANZHE == type){return new SanzheInsuranceClaimCalculate();}if(TYPE_JIAOQIANG == type){return new JiaoqiangInsuranceClaimCalculate();}}}
请忽略没有使用枚举表示类型,没有使用配置文件及ClassLoader的方式来加载类等等。
5. JDBC
JDBC是Java提供的数据库链接的框架,不同的数据库厂商可以根据自己的情况进行实现,然后接入到整个框架中来。通常会按照如下的逻辑:
Class.forName("com.mysql.jdbc.Driver");Connection con = DriverManager.getConnection("");这个实际上相当于
// mysql Driver中的代码:把自己进行注册static {DriverManager.registerDriver(new Driver);}// 在DriverManager.getConnection中的代码:return driver.connect()这里跟静态方法代替构造器相关的主要是
DriverManager.getConnection这个方法,但是整体运用起来是一个很好的服务提供者及注册框架,可以在写框架的时候不用考虑有多少种自己的实现。
6. Map<String, List<Map<String, String>>> map = Colleactions.emptyMap()
正常情况下我们new一个map需要如下的代码:
Map<String, List<Map<String, String>>> map = new HashMap<String, List<Map<String, String>>>();
但是如果给Map做一下改变,我们就能简化这个声明:
Map<String, List<String>> map = new HashMap<String, List<String>>(); 变为: 加上这个构造器: public static <K, V> MyMap<K,V> newInstance(){ return new MyMap<K, V>(); } //就可以使用这句来得到对象了:Map<String, List<String>> map = MyMap.newInstance();
以上使用静态方法而不使用构造器我们得到了这样的好处,同时也是编码中经常可能用到的最佳实践。
1. 不会创建重复的值,使用valueOf或者是单例的这种情况
2. 有名字,可以更清晰的表达
3. 更短的代码
4. 可以返回子类,这样就可以更好的使用面向接口的编程
5. 可以把本来可能逻辑上位置应该在接口中的代码写到Types的类中。
同时一些不好的地方:
1. 跟其他的静态方法没有什么区别,不知道是工具类方法还是用作创建对象的方法
- 静态方法代替构造器-effectiveJava读书笔记
- EffectiveJava-考虑用静态工厂方法代替构造器
- EffectiveJava 第1条 :创建和销毁对象--考虑用静态方法代替构造器
- 读书笔记-《Effective java 》之 考虑静态方法代替构造器
- EffectiveJava(1) 构造器和静态工厂方法
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
- Effective Java 读书笔记——1:考虑用静态工厂方法代替构造器
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
- Effective Java 读书笔记之 1.考虑用静态工厂方法代替构造器
- 用静态工厂方法代替构造器
- 用静态工厂方法代替构造器
- 用静态工厂方法代替构造器
- 用静态工厂方法代替构造器
- 静态工厂方法代替构造器
- EffectiveJava-1.考虑使用静态工厂方法替代构造方法
- 多参构造使用构建器--effectiveJava读书笔记
- 考虑使用静态工厂方法代替类的构造器
- 考虑使用静态工厂方法代替构造器
- 程序员怎么从中国直接去美国工作?
- 朝阳过敏性鼻炎如何调理 首选祖传鼻炎药
- 深入探索C++对象模型--C++构造函数
- gnome3 添加自定义app
- 12-15:迭代器
- 静态方法代替构造器-effectiveJava读书笔记
- swift学习---长句部分六(第一次计划看一本完整的英文资料,你是最棒的,加油)
- 第16周项目1-1指针变量引用数组来输出数组
- uninty3D__一月后的心得
- 入侵【提权】读取各种配置文件
- ScrollView嵌套GridView的滚动事件解决
- 我的第一篇文章
- 能力要提高,就需要操作,我认为就是这样,我也这样做
- white-space 各个值的含义DEMO