effective心得(一) 静态工厂方法
来源:互联网 发布:java开发mes系统 编辑:程序博客网 时间:2024/04/27 19:45
静态工厂方法讲解:
创建类的实例最常见的就是new语句来调用类的构造方法。在这种情况下,程序可以创建类的任意多个实例,每执行一个new语句,都会导致java虚拟机的堆区产生一个java对象。假如类需要进一步封装创建自身实例的细节,并且控制自身实例的数目,那么就可以考虑静态工厂方法。
静态工厂方法与new语句调用的构造方法相比,有以下区别:
(1):静态工厂的方法名可以任意的,这一特性的优点是可以提高代码的可读性,在方法名中能体现与实例有关的信息。
例如Gender类有两个静态工厂方法:getFemale()和getMale()。
Gender.java
public class Gender{
private String description;
private static final Gender female=new Gender("女");
private static final Gender male=new Gender("男");
private Gender(String description){this.description=description;}
public static Gender getFemale(){
return female;
}
public static Gender getMale(){
return male;
}
public String getDescription(){return description;}
}
这一特性的缺点是与其他的静态方法没有明显的区别,使用户难以识别类中到底哪些静态方法专门负责返回类的实例。为了减少这一缺点带来的负面影响,可以在为静态工厂方法命名时尽量遵守约定俗成的规范,当然这不是必需的。目前比较流行的规范是把静态工厂方法命名为valueOf或者getInstance。
静态工厂方法最主要的特点是:每次被调用的时候,不一定要创建一个新的对象。利用这一特点,静态工厂方法可用来创建以下类的实例。
单例类:只有惟一的实例的类。
枚举类:实例的数量有限的类。
具有实例缓存的类:能把已经创建的实例暂且存放在缓存中的类。
具有实例缓存的不可变类:不可变类的实例一旦创建,其属性值就不会被改变。
但静态工厂方法又有缺点:1. 类如果不含公有的或者default的,就不能被子类化
2.他们跟其它的静态方法实际上没有任何区别。但这可以尽量采用一些家喻户晓的名字解决,让用户看到改名字就知道该方法是静态工厂方法。如getInstance()。
- effective心得(一) 静态工厂方法
- Effective 学习(1) ---- 静态工厂方法
- Effective Java 学习笔记《一》 静态工厂方法
- Effective Java --静态工厂方法
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
- 十月读书笔记:Effective Java(一)--静态工厂方法及私有化构造函数
- Effective Java学习笔记一(静态工厂方法、JavaBeans模式、builder模式)
- Effective Java 读书笔记(一):使用静态工厂方法代替构造器
- Effective Java(静态工厂与构造器一)
- Effective.Java 读书笔记(1)静态工厂和构造方法
- Effective Java: 使用静态工厂方法
- effective--构造器和静态工厂方法
- effective java 之使用静态工厂方法替代构造方法
- Effective Java之静态工厂代替构造器(一)
- Effective Java(1)考虑静态工厂方法代替构造器
- 1、考虑用静态工厂方法代替构造器(effective java)
- Effective Java 进阶之路第一章(创建和销毁对象) 第一条(静态工厂方法)
- 静态工厂方法跟公有构造器(Effective Java读后自我总结)
- Android Studio 打包apk,自动追加版本号和版本名称
- SRM 542 DIV1 500 StrangeDictionary2
- [LeetCode] 165. Compare Version Numbers
- jQuery validate 手机号和身份证号验证
- zabbix安装
- effective心得(一) 静态工厂方法
- SpringMVC相关介绍
- SIP响应代码
- 学习反射记录
- struts中拦截器拦截Action中的execute方法后的具体拦截流程
- android 微信、支付宝支付总结
- JEECG -js方法存放文件
- Very deep convolutional networks for larage-scale image recognition
- .hpp文件和.h文件的区别