考虑用静态工厂方法替代构造器的情况
2015-08-08 13:40
190 查看
考虑用静态工厂方法替代构造器
原来创建一个自定义类的实例最常用的方法是采用构造器,但一个类可以有多个构造器,而所有的构造器名字都相同,我们只能通过参数来区分不同构造器的作用。除了采用构造器外,还可以采用静态工厂方法,该方法返回类的实例便可,自定义的方法可以自己命名,这样一来就很容易区分每个方法的作用了。
例子:
publicclass CreateObject
{
intage;
String name;
public CreateObject(String
name){
this.name =
name;
}
public CreateObject(String
name,int age){
this.name =
name;
this.age =
age;
}
//....
publicstatic CreateObject
getInstanceWithName(String name){
returnnew CreateObject(name);
}
publicstatic CreateObject
getInstanceWithNameAndAge(String name,int age){
returnnew CreateObject(name,
age);
}
publicstaticvoid main(String[]args){
CreateObject createObject = new CreateObject("nnn");
CreateObject createObject2 = new CreateObject("nnn",
11);
CreateObject createObject3 = CreateObject.getInstanceWithName("mmm");
CreateObject createObject4 = CreateObject.getInstanceWithNameAndAge("mmm",
22);
}
}
静态工厂方法好处:
1、静态工厂方法有名称
2、可以用于创建单例模式,而构造器每次都会创建一个新实例
3、可以返回该类的任何子类,从而可以实现子类的灵活实例化
原来创建一个自定义类的实例最常用的方法是采用构造器,但一个类可以有多个构造器,而所有的构造器名字都相同,我们只能通过参数来区分不同构造器的作用。除了采用构造器外,还可以采用静态工厂方法,该方法返回类的实例便可,自定义的方法可以自己命名,这样一来就很容易区分每个方法的作用了。
例子:
publicclass CreateObject
{
intage;
String name;
public CreateObject(String
name){
this.name =
name;
}
public CreateObject(String
name,int age){
this.name =
name;
this.age =
age;
}
//....
publicstatic CreateObject
getInstanceWithName(String name){
returnnew CreateObject(name);
}
publicstatic CreateObject
getInstanceWithNameAndAge(String name,int age){
returnnew CreateObject(name,
age);
}
publicstaticvoid main(String[]args){
CreateObject createObject = new CreateObject("nnn");
CreateObject createObject2 = new CreateObject("nnn",
11);
CreateObject createObject3 = CreateObject.getInstanceWithName("mmm");
CreateObject createObject4 = CreateObject.getInstanceWithNameAndAge("mmm",
22);
}
}
静态工厂方法好处:
1、静态工厂方法有名称
2、可以用于创建单例模式,而构造器每次都会创建一个新实例
3、可以返回该类的任何子类,从而可以实现子类的灵活实例化
相关文章推荐
- Snail—数据结构学习之单向链表
- SVM对手写数字的识别
- Operations Manager 2012 R2 基础知识
- Spring Mvc 4 HelloWord
- poj 2526 Minimum Cost【最小费用最大流】
- C#写入和读出文本文件
- EXCEL 两人的建立Y轴
- Hibernate HQL查询异常:java.lang.ClassCastException解决
- 去除重复字符并排序
- python网络编程
- Win10怎么关闭UAC控制?win10关闭uac方法
- 如何实现稳定的千万级PV移动应用架构
- iOS中图像处理技术资料:
- rpm包下载地址
- leetcode 097 —— Interleaving String
- 中缀表达式转后缀表达式
- List of devices attached is followed by blank!
- STM32F4: Generating parallel signals with the FSMC
- PhotoShop 证件照背景的简单替换
- iOS第三方做滤镜最主流的开源框架GPUImage