2009年4月9日星期四

JavaDesign_016:享元模式 Flyweight(摘录+整理)

1. 特点
(1)共享大量内容相同的细粒度对象,减少内存开销。(2)享元对象包含内蕴状态和外蕴状态,内蕴状态可以共享,外蕴状态不可以共享。(3)外蕴状态由客户端保存,外蕴状态无法影响内蕴状态。
举例来说:文本编辑器中的字体,一个字体就是一个享元,内蕴状态就是这个字本身,字体的字模风格和所在位置就是外蕴状态。


2. 代码架构(1)抽象享元类,含商业方法,外蕴状态作为参数传入。(2)具体享元类继承抽象享元类,构造函数参数为内蕴状态
(3)享元工厂,一般为单例模式,即只能由享元工厂创建和管理享元,保证享元被适当地共享。工厂方法参数为内蕴状态

3. Java中对享元模式的应用
(1)String 类,不变对象,一旦创建出来就无法改变。
对于内容相同的两个字符串,JVM只创建一个String对象给这两个引用。
4. 典型应用场景(1)文本编辑器中的字体。(2)CD对象中的演唱者(一个演唱者可以出版多个专辑CD)。

参考文献:
1. 《设计模式》 板桥里人
2. 《Java与模式》 阎宏

没有评论: