Flyweight
概述:
共享对象,避免浪费,即通过尽量共享实例来避免new出实例
说明:
1.本文仅仅是对 图解设计模式 的简单总结(个人笔记).
2.文章中的图片均来自本书,添加水印只是为了防止盗链行为,并无侵权的想法.
综上,若侵权, 请联系我删除!
转载请标注出处!
案例:
案例说明:
将许多普通字符组合成为”大写字符的类”
主要代码:
BigCharFactory.java
package Gof.Flyweight; import java.util.HashMap; public class BigCharFactory { // 管理已经生成的BigChar的实例 private HashMap pool = new HashMap(); // Singleton模式 private static BigCharFactory singleton = new BigCharFactory(); // 构造函数 private BigCharFactory() { } // 获取唯一的实例 public static BigCharFactory getInstance() { return singleton; } // 生成(共享)BigChar类的实例 public synchronized BigChar getBigChar(char charname) { BigChar bc = (BigChar)pool.get("" + charname); if (bc == null) { bc = new BigChar(charname); // 生成BigChar的实例 pool.put("" + charname, bc); } return bc; } }
代码链接:传送门
uml综述
Flyweight: 表示被共享的类
FlyweightFactory: 生成Flyweight角色的工厂
Client: 使用FlyweightFactory生成Flyweight角色
收获:
共享的特点: 修改一处,会对多个地方产生影响
Java通过new 分配内存空间,分配过多,导致内存不足,jvm开始运行gc算法,回收垃圾(处理堆空间中不在不使用的对象),释放没有被使用的实例
计算机资源:内存,时间片,文件句柄,和窗口句柄(最后两个: 在os中,可以操控的handler 是有限的,若果不共享实例,很容易达到资源的极限而崩溃)
Intrinsic信息与extrinsic信息
|intrinsic信息|不依赖于位置与状况,可以共享| |-|-| |extrinsic信息| 依赖于位置与状况,不能共享|
相关设计模式:
- proxy : 若生成实例需要花费较长时间,可以使用Flyweight减少这部分时间,而proxy则是通过设置代理提过程序的处理速度
- composite: 可以使用Flyweight来共享composite模式中的leaf角色
- singleton:
注意:
此部分内容属于对GOF Design Pattern知识的初步认知阶段,参考书籍是结城浩的《图解设计模式》,简单易懂,十分推荐!
以上内容,作者一字一句码出来的,纯属不易,欢迎大家转载,转载是还请您表明出处。另外如果我有侵权行为,请在下方留言,确认后我会及时撤销相应内容,谢谢大家!
PS: 欢迎大家来到我的小站,鸣谢!
猜你喜欢