静态方法代替构造器-effectiveJava读书笔记
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. 跟其他的静态方法没有什么区别,不知道是工具类方法还是用作创建对象的方法
Java面向对象之构造方法 1.概念: 一个类中的一组方法 相同的方法名字 不同的参数列表 构成了方法重载 参数的不同体现在 参数的个数 参数的类型 参数的顺序 三个方面 2.作用: 为了便于记忆和调用 使得方法调用时更加的灵活 3.自己也可以设计方法重载 调用的时候 先通过方法名字来定位 名字一致 通过参数列表的数据类型来定位 方法返回值 修饰符--- 跟方法重载没什么关系 4.JDK1.5之后 新的写法 动态参数列表 ... 参数类型固定 参数的个数可以动态 0-n 使用起来类似与数组的使用 length index int[]..
Java反射之创建对象 Java反射机制提供了另外一种创建对象方法,Class类提供了一个实例方法newInstance(),通过该方法 可以创建对象,使用起来比较简单,下面两条语句实现了创建字符串String对象。
相关文章
- 多参构造使用构建器--effectiveJava读书笔记
- 《高效程序员的修炼》 读书笔记
- 大话企业级android读书笔记(一)
- 《android开发进阶从小工到专家》读书笔记--网络框架的设计与实现
- 读书笔记--SQL必知必会13--创建高级联结
- vue读书笔记变量绑定
- 电磁场与电磁波:读书笔记:静电场边界条件
- AngularJS in Action读书笔记3——走近Services
- 《多接入边缘计算(MEC)及关键技术》读书笔记 | 第3章 MEC系统架构及部署组网策略
- 《Kubernetes网络权威指南》读书笔记 | Kubernetes网络策略:为你的应用保驾护航
- 战争论 读书笔记
- opencv2对于读书笔记——背投影图像的直方图来检测待处理的内容
- MySQL技术内幕读书笔记(七)——锁
- 读书笔记《GitHub入门与实践》大塚弘记