• 设计模式_Flyweight_享元模式


    形象例子:

      每天跟MM发短信,手指都累死了,最近买了个新手机,可以把一些常用的句子存在手机里,要用的时候,直接拿出来,在前面加上MM的名字就可以发送了,再不用一个字一个字敲了。共享的句子就是Flyweight,MM的名字就是提取出来的外部特征,根据上下文情况使用。

    享元模式:

      FLYWEIGHT在拳击比赛中指最轻量级。享元模式以共享的方式高效的支持大量的细粒度对象。享元模式能做到共享的关键是区分内蕴状态和外蕴状态。

    内蕴状态存储在享元内部,不会随环境的改变而有所不同。

    外蕴状态是随环境的改变而改变的。外蕴状态不能影响内蕴状态,它们是相互独立的。将可以共享的状态和不可以共享的状态从常规类中区分开来,将不可以共享的状态从类里剔除出去。客户端不可以直接创建被共享的对象,而应当使用一个工厂对象负责创建被共享的对象。享元模式大幅度的降低内存中对象的数量。

    作用:
      运用共享技术有效地支持大量细粒度的对象。

    UML结构图:



    解析:
      Flyweight 模式在大量使用一些可以被共享的对象的时候经常使用.比如,在QQ聊天的时候很多时候你懒得回复又不得不回复的时候,一般会用一些客套的话语敷衍别人, 如"呵呵","好的"等等之类的,这些简单的答复其实每个人都是提前定义好的,在使用的时候才调用出来.Flyweight就是基于解决这种问题的思路而产生的,当需要一个可以在其它地方共享使用的对象的时候,先去查询是否已经存在了同样的对象,如果没有就生成之有的话就直接使用.因 此,Flyweight模式和Factory模式也经常混用.

    实现:
      需要说明的是下面的实现仅仅实现了对可共享对象的使用,非可共享对象的使用没有列出,因为这个不是Flyweight模式的重点.这里的实现要点是采用一个list链表来保存这些可以被共享的对象,需要使用的时候就到链表中查询是不是已经存在了,如果不存在就初始化一个,然后返回这个对象的指针.

  • 相关阅读:
    做了48小时爸爸的感觉!
    利用Session和HashTable制作购物车
    vs2005控件演示之 Literal
    vs2005/.net2.0 控件实例之 下拉列表《DropDownList》
    vs2005/.net2.0 控件实例之 单选按纽和复选框 <RadioButton><CheckBox>
    vs2005/.net2.0 控件实例之 单选列表和复选列表
    一个被大多数初级程序员忽略的安全问题 [严重]
    使用Northwind和Entity框架的ASP.NET MVC实例发布
    对话Spring.NET
    揭开HTML 5工作草稿的神秘面纱
  • 原文地址:https://www.cnblogs.com/uestc999/p/3949884.html
Copyright © 2020-2023  润新知