黑马程序员技术交流社区

标题: 这代码怎么理解?有没有人详细讲解一下享元模式? [打印本页]

作者: crazy_primitive    时间: 2013-7-14 10:06
标题: 这代码怎么理解?有没有人详细讲解一下享元模式?
本帖最后由 crazy_primitive 于 2013-7-14 10:37 编辑
  1. public class StaticImport {
  2. public static void main(String[] args) {
  3. flyWeight();
  4. }

  5. public static void flyWeight(){
  6. Integer i1=147;
  7. Integer i2=147;
  8. System.out.println(i1==i2);//false
  9. Integer i1=7;
  10. Integer i2=7;
  11. System.out.println(i1==i2);//true
  12. }
  13. }
复制代码

作者: 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