无废话C#设计模式之十:Flyweight
2009-04-02 08:23:25 来源:WEB开发网核心提示: 代码执行结果如下图(前面是使用享元模式的结果,后面是没有使用享元模式的结果):代码说明l 这里的ModelFactory就是享元工厂角色,无废话C#设计模式之十:Flyweight(2),它的作用是创建和管理享元对象,可以看到,并且对外界来说这些对没有任何差别的(或者说经过改造后可以是没有
代码执行结果如下图(前面是使用享元模式的结果,后面是没有使用享元模式的结果):
代码说明
l 这里的ModelFactory就是享元工厂角色。它的作用是创建和管理享元对象。可以看到,每加载一个模型都会在Hashtable中记录一下,之后如果客户端还是需要这个模型的话就直接把已有的模型对象返回给客户端,而不是重新在内存中加载一份模型数据。
l ModelFactory本身应用了Singleton,因为如果实例化多个享元工厂是的话就起不到统一管理和分配享元对象的目的了。
l Model就是享元角色。在构造方法中传入modelName,然后它从指定路径加载模型数据,并且把数据放入字段中。
l 从代码的运行结果中可以看到,如果没有应用享元模式,那么在内存中就会有10000套模型对象,由于一共就2个模型,所以9998个对象是可以通过享元来消除的。
何时采用
l 系统中有大量耗费了大量内存的细粒度对象,并且对外界来说这些对没有任何差别的(或者说经过改造后可以是没有差别的)。
实现要点
l 享元工厂维护一张享元实例表。
l 享元不可共享的状态需要在外部维护。
更多精彩
赞助商链接