[读书]设计模式:享元模式

面对的问题

    关于对象的重量有个常见的问题:如果你不停的创建对象,但是又没有良好的策略,那么它们会消耗大量的资源。为了处理资源浪费,你一定明确的想去避免复制那些特别是会影响你的应用的对象。

解决办法

    享元模式注定被用于减少工作时对象的重量。最简单的办法就是减少对象的声明。

JDK中的享元

    java中,经典的享元模式的例子就是String类了。在内存中有块特殊的区域存储着字符串,可以在需要时重复利用。这块区域被称作字符串池。使用字面创建一个新的String对象时首先要和串池中的对象去匹配,然后才决定是否创建。

    如果找到了这个匹配,新的引用就会指向串池中的这个匹配对象。这就意味着我们可以避免创建这个对象的副本。下面代码的运行中你将会看到享元模式:

 
 
  1. String str1 = "abc"
  2.  
  3. String str2 = "abc"
  4.  
  5. System.out.println(str1==str2); 

    上面的代码片段会在控制台打印出“true”,因为str1str2在内存中是指向同一个对象的。对象在第一行代码中被创建了,然后又被第二行的重复利用了。你可以说String不是重量的对象,也不会消耗很多内存,既然它在java中是不变的,在应用中他们可以很容易的增加。

怎样使用享元

      我们也可以再特定的对象上创建这种行为,例如文字处理程序的属性。事物有固定的属性和非固定的属性,说的专业一些就是事物的可共享性和不可共享性。共享性应当用来作为事物是否可以重用的标准。不可共享性应当被用作元数据和不能影响基本事物。例如颜色属性,可以在显示的时候通过对元数据的响应来动态的控制,因此相同属性的事物可以使用很多颜色来展现。像 “a,b,c”这种内容的属性是固定的属性,颜色就是不固定的属性。


补充:享元模式在函数编程中也叫做
Hash Consing

引用:

1) http://en.wikipedia.org/wiki/Flyweight_pattern
2)
 http://sourcemaking.com/design_patterns/flyweight
3)
 http://www.codeproject.com/Articles/186002/Flyweight-Design-Pattern


原文地址:http://www.javaexperience.com/design-patterns-flyweight-design-pattern/

不清楚的表达:

weight of objects  literal

也就是说那些重复要用的小对象,如果可以设定共享的话会节省很多的资源。例如字符对象,

如果不能共享,那么一个文档得要消耗多少资源啊。

本文出自 orangleliu笔记本 博客,请务必保留此出处http://blog.csdn.net/orangleliu/article/details/38309413

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值