网站首页

家园论坛

老版论坛

家园博客

业界新闻

技术文档

下载中心

速查中心

图片中心

硬件资讯
上一篇:无废话C#设计模式之九:Proxy 下一篇:无废话C#设计模式之十一:Composite
无废话C#设计模式之十:Flyweight

来源: 作者: 添加日期:2007-12-2 10:34:05 点击次数:

代码执行结果如下图(前面是使用享元模式的结果,后面是没有使用享元模式的结果):

代码说明

 

l         这里的ModelFactory就是享元工厂角色。它的作用是创建和管理享元对象。可以看到,每加载一个模型都会在Hashtable中记录一下,之后如果客户端还是需要这个模型的话就直接把已有的模型对象返回给客户端,而不是重新在内存中加载一份模型数据。

l         ModelFactory本身应用了Singleton,因为如果实例化多个享元工厂是的话就起不到统一管理和分配享元对象的目的了。

l         Model就是享元角色。在构造方法中传入modelName,然后它从指定路径加载模型数据,并且把数据放入字段中。

l         从代码的运行结果中可以看到,如果没有应用享元模式,那么在内存中就会有10000套模型对象,由于一共就2个模型,所以9998个对象是可以通过享元来消除的。

 

何时采用

 

l         系统中有大量耗费了大量内存的细粒度对象,并且对外界来说这些对没有任何差别的(或者说经过改造后可以是没有差别的)。

 

实现要点

 

l         享元工厂维护一张享元实例表。

l         享元不可共享的状态需要在外部维护。

l         按照需求可以对享元角色进行抽象。

 

注意事项

 

l         享元模式通常针对细粒度的对象,如果这些对象比较拥有非常多的独立状态(不可共享的状态),或者对象并不是细粒度的,那么就不适合运用享元模式。维持大量的外蕴状态不但会使逻辑复杂而且并不能节约资源。

l         享元工厂中维护了享元实例的列表,同样也需要占用资源,如果享元占用的资源比较小或者享元的实例不是非常多的话(和列表元素数量差不多),那么就不适合使用享元,关键还是在于权衡得失。

本新闻共2页,当前在第2页  1  2  

 
设为首页 | 加入收藏 | 业务办理 | 友情链接 | 论坛版面 | 浙ICP备07502118号 |