Java中的享元(flyweight)设计模式
2015-10-23 11:06
239 查看
问题:
如果利用java5自动装配特性定义两个对象:
那么,这两个对象是不是同一个对象呢?
结果是true,还是false?
如果这样定义:
结果又是什么?
答案:第一种定义的结果是true,而第二种的结果则是false。
原因是这样的,如果这个数字在一个字节之内,就是-128~127之间,java会认为这些对象占用资源少,使用的频率可能会很高,所以采用了享元设计模式进行处理。
结论:对于一个小的整数(1个字节内),装箱之后的对象是同一个。
享元设计模式:有很多个小的对象,它们之间有相同的属性,就把这些对象定为一个对象。它们之间相同的属性称为内部状态,而它们之间不相同的属性可以定义为方法的参数, 称之为外部状态。
思考:设计模式不一定很复杂,有时候也会很简单,但它仍然是一种经典的模式。
如果利用java5自动装配特性定义两个对象:
Integer i1 = 13; Integer i2 = 13;
那么,这两个对象是不是同一个对象呢?
System.out.print(i1==i2);
结果是true,还是false?
如果这样定义:
Integer i1 = 137; Integer i2 = 137;
结果又是什么?
答案:第一种定义的结果是true,而第二种的结果则是false。
原因是这样的,如果这个数字在一个字节之内,就是-128~127之间,java会认为这些对象占用资源少,使用的频率可能会很高,所以采用了享元设计模式进行处理。
结论:对于一个小的整数(1个字节内),装箱之后的对象是同一个。
享元设计模式:有很多个小的对象,它们之间有相同的属性,就把这些对象定为一个对象。它们之间相同的属性称为内部状态,而它们之间不相同的属性可以定义为方法的参数, 称之为外部状态。
思考:设计模式不一定很复杂,有时候也会很简单,但它仍然是一种经典的模式。
相关文章推荐
- 用java字节码解释i++和++i(转)
- spring第一课,beans配置(上)
- hadoop1 eclipse插件编译
- eclipse中svn冲突解决
- Eclipse搭建SSH(Struts2+Spring3+Hibernate3)框架项目教程
- Eclipse中使用SVN
- Java注意的地方
- Java输入流
- spring发送Email
- Spring mvc中前台表单自动绑定实体类(不用注释)
- springMVC 启动时 加载数据
- dubbo异常 DubboProtocol.createServer(DubboProtocol.java:331)
- Spring Boot的两种使用方式
- myeclipse优化
- java.lang.IllegalArgumentException: Negative time
- spring-org.springframework.beans.factory.BeanDefinitionStoreException及相关介绍
- Java 多维数组遍历
- Spring--quartz中cronExpression配置说明 (注意?说明)
- ElasticSearch学习2_Java version:1.7.0_51 suffers from critical bug及ES对JDK版本要求
- JAVA学习之 将xml导入到数据库