黑马程序员技术交流社区
标题: 这代码怎么理解?有没有人详细讲解一下享元模式? [打印本页]
作者: crazy_primitive 时间: 2013-7-14 10:06
标题: 这代码怎么理解?有没有人详细讲解一下享元模式?
本帖最后由 crazy_primitive 于 2013-7-14 10:37 编辑
- public class StaticImport {
- public static void main(String[] args) {
- flyWeight();
- }
- public static void flyWeight(){
- Integer i1=147;
- Integer i2=147;
- System.out.println(i1==i2);//false
- Integer i1=7;
- Integer i2=7;
- System.out.println(i1==i2);//true
- }
- }
复制代码
作者: panningwjr 时间: 2013-7-14 10:17
之前分享过了,还是给你发一下吧!
享元模式 flyweight
flyweight解释:Flyweight是拳击比赛中的特用名词,意思是“特轻量级”,指的是51公斤级比赛,用到设计模式中就是指我们的类要轻量级,粒度要小,这才是它要表达的意思。粒度小了,带来的问题就是对象太多,所以用共享技术来解决
Ps.如:Integer i1= 7;
Integer i2 = 7;
System.out.println(i1 == i2);// 输出true
就是用到了享元模式,对用到特别多的对象实现共享。可减少创建的对象数量,防止因对象太多而导致内存溢出问题的出现
享元设计模式是池技术的重要实现:
定义:Use sharing tosupport large numbers of fine-grained objects efficiently.(使用共享对象可有效的支持大量的细粒度的对象)
细粒度对象:
内部状态:
即对象可共享出来的信息,存储在享元对象内部并不会随环境改变而改变
外部状态:
外部状态是对象得以依赖的一个标记,是随环境改变而改变的,不可以共享的状态,它是一批对象的统一标识,是唯一的一个索引值。
优点:
模式非常简单,可以大大减少应用程序创建的对象,降低程序内存的占用,增强程序的性能。
缺点:
提高了系统的复杂性,需要分离出外部状态和内部状态,而且外部状态具有固化特性,不应该随内部状态改变而改变,否则导致系统的逻辑混乱。
使用场景:
1, 系统中存在大量的相似对象。
2, 细粒度的对象都具备较接近的外部状态,而且内部状态与环境无关,也就是说对象没有特定身份。
3, 需要缓冲池的场景。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |