首页 » 设计模式之禅(第2版) » 设计模式之禅(第2版)全文在线阅读

《设计模式之禅(第2版)》28.5 最佳实践

关灯直达底部

Flyweight是拳击比赛中的特用名词,意思是“特轻量级”,指的是51公斤级比赛,用到设计模式中是指我们的类要轻量级,粒度要小,这才是它要表达的意思。粒度小了,带来的问题就是对象太多,那就用共享技术来解决。

享元模式在Java API中也是随处可见,如这样的程序就是一个很好的例子,如代码清单28-17所示。

代码清单28-17 API中的享元模式

public class Test {    public static void main(String args) {   String str1 = "和谐";   String str2 = "社会";   String str3 = "和谐社会";   String str4;    str4 = str1 + str2;    System.out.println(str3 == str4);   str4 = (str1 + str2).intern;    System.out.println(str3 == str4);    }}  

看看Java的帮助文件中String类的intern方法。如果是String的对象池中有该类型的值,则直接返回对象池中的对象,那当然相等了。

需要说明一下的是,虽然可以使用享元模式可以实现对象池,但是这两者还是有比较大的差异,对象池着重在对象的复用上,池中的每个对象是可替换的,从同一个池中获得A对象和B对象对客户端来说是完全相同的,它主要解决复用,而享元模式在主要解决的对象的共享问题,如何建立多个可共享的细粒度对象则是其关注的重点。