启示

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。一个很常见的例子:玩LOL都知道,每局有个人对战,每人可以选择一个英雄,假如一个网吧有很多人都玩这个游戏,那么肯定会有很多的英雄重复被选到。如果每个英雄被选择时就在内存中创建一个实例,那么服务器要承受多少的压力,万一一个城市的人都在玩这个英雄,那么服务器应该要炸了。使用享元模式就是把这些重复的实例干掉,在选择相同的英雄时只在内存创建一个实例,需要注意的是,比如血量、魔法等是不一样的,所以要放作外部状态,而技能、英雄特性是相同的,就可以不用分离出来,留作内部状态。

享元模式详解

  这个模式中享元工厂角色里面角色的实现是关键!一般会有这样的代码:

if(对象实例== null) {
         circle = new 对象(对象实例);
这样就保证了创建的是一个对象。

使用优缺点

享元模式优点就在于它能够大幅度的降低内存中对象的数量;而为了做到这一步也带来了它的缺点:它使得系统逻辑复杂化,而且在一定程度上外蕴状态影响了系统的速度。

所以一定要切记使用享元模式的条件:

1)        系统中有大量的对象,他们使系统的效率降低。

2)        这些对象的状态可以分离出所需要的内外两部分。

外蕴状态和内蕴状态的划分以及两者关系的对应也是非常值得重视的。只有将内外划分妥当才能使内蕴状态发挥它应有的作用;如果划分失误,在最糟糕的情况下系统中的对象是一个也不会减少的!两者的对应关系的维护和查找也是要花费一定的空间(当然这个比起不使用共享对象要小得多)和时间的,可以说享元模式就是使用时间来换取空间的。在Gof的书中是使用了B树来进行对应关系查找优化。

 

 

posted on 2017-11-02 15:23  启示  阅读(129)  评论(0编辑  收藏  举报