zoukankan      html  css  js  c++  java
  • [Design] Flyweight Pattern

      结构模式 

      结构模式描述如何将类或者类的对象结合在一起形成更大的结构。
      结构模式描述两种不同的东西:类与类的实例。结构模式可以分为:类的结构模式和对象的结构模式两种。
      类的结构模式:类的结构模式使用继承来把类、接口等组合在一起,以形成更大的结构。类的结构模式是静态的,比如类形式的适配器模式。
      对象的结构模式:对象的结构模式描述怎么样把不同类型的对象组合在一起,以实现新的功能的方法。对象的结构模式是动态的。比如代理人模式。

    --------------------------------------------------------------------------------------


    享元(Flyweight)模式

      享元模式是对象的结构模式。享元模式以共享的方式高效地支持大量的细粒度对象。根据享元对象的内部表象,享元模式可以分成单纯享元模式和复合享元模式两种形 式。享元对象不一定非要是不变对象。一个享元对象之所以能够共享,是因为它只含有可以共享的状态,而没有不可以共享的状态,这是应用享元模式的前提。享元 工厂实际上提供了一个缓存机制,判断对象是否存在然后创建或直接返回对象。

    优缺点

    使用享元模式可以大幅度降低内存中对象的数量。但是为了可以享元,需要将一些状态外部化, 这使得程序逻辑变的复杂,而且读取外部状态使得运行时间稍微变长。


    单纯享元模式结构


    1.    抽象享元角色

    所有具体享元角色的基类。

    2.    具体享元角色

    实现抽象享元角色所规定的接口。如果有内蕴状态的话,必须为内蕴状态提供存储空间。内蕴状态必须与对象所处的周围环境无关,从而使得享元对象可以在系统内共享。

    3.    享元工厂角色

    负责创建和管理享元角色。保证享元对象可以被适当的共享,检查系统中是否有复合要求的对象。如果要直接近回,否则创建并返回。

    4.    客户端角色

    本角色需要维护一个对所有享元对象的引用,自行存储所有享元对象的外蕴状态。

    复合享元模式结构


    1.    抽象享元角色

    所有具体享元角色的基类。

    2.    具体享元角色

    实现抽象享元角色所规定的接口。如果有内蕴状态的话,必须为内蕴状态提供存储空间。内蕴状态必须与对象所处的周围环境无关,从而使得享元对象可以在系统内共享。又称单纯具体享元角色。

    3.    复合享元角色

    此角色所代表的对象是不可以共享的,但可分解成多个本身可以共享的单纯享元对象。又称不可共享的享元对象。

    4.    享元工厂角色

    负责创建和管理享元角色。保证享元对象可以被适当的共享,检查系统中是否有复合要求的对象。如果要直接近回,否则创建并返回。

    5.    客户端角色

    本角色需要自行存储所有享元对象的外蕴状态。


  • 相关阅读:
    PTA——List Leaves
    pta——电话聊天狂人(c二叉树实现)
    Anti-SG游戏 与 SJ定理笔记(反Nim博弈)
    Unicode代码点与代码单元
    奇偶校验位
    IPv6与IPv4的位数
    0- win10配置java环境变量问题
    小计划
    路径问题
    getResource(path)的注意事项
  • 原文地址:https://www.cnblogs.com/abeen/p/1437651.html
Copyright © 2011-2022 走看看