zoukankan      html  css  js  c++  java
  • Flyweight Pattern(享元模式) 上海

     Flyweight Pattern
      一,Define
            运用共享技术有效地支持大量细粒度的对象,系统只有使用少量的对象,而这些对象都很接近,状态变化很小。
          对系统是使用的次数增多。
     二,类和对象的关系
         1,Flyweight: 抽象轻量级类
           声明一个接口,通过它可以接受外来的参数(状态),并对新状态做出处理(作用)
         2,ConcreteFlyweight: 具体轻量级类
            实现Flyweight的接口,并为内部状态(如果有的话)增加存储空间,ConcreteFlyweight 对象必须是可以共享的,
              它所存储的状态必须是内部的,既它独立存在于自己的环境中。
         3,UnsharedConcreteFlyweight: 不共享具体轻量级类
               不是所有的Flyweight子类都需要被工享,Flyweight的工享不是强制的。在某些Flyweight的机构层次中,
                UnsharedConcreteFlyweight 对象通常将ConcreteFlyweight对象作为子节点
         4,FlyweightFactory: 轻量级工厂
                 A:创建并管理Flyweight对象
                 B:确保享用Flyweight.当用户请求一个Flyweight是,FlyweightFactory 提供一个已创建的实例或者创建一个实例(如果不存在)
        5,Client:  客户应用程序
                 A:维持一个对Flyweight的运用
                 B:计算或存储一个或多个Flyweight的外部状态。
        
           客户初次从轻量级工厂取Flyweight时,轻量级类工厂创建一个新的具体Flyweight对象,并且保存起来,下次客户取用时,就不用重新创建。
      直接在保存池中返回,客户负责处理Flyweight的状态。
       总结:Flyweight模式需要你认真考虑如何能细化对象,以减少处理的对象数量,从而减少存留对象在内存,然而,此模式需要维护大量的对象的外部状态,
    如果外部状态的数据量大,传递,查找,计算这些数据会变的非常复杂。当外部和内部的状态很难分清时,不宜采用Flyweight
       推荐场景:
               1,系统需要存储在大量的对象而共享某些本质的,不边的信息。
               2,对象可以同时用于多个环境下。
               3,在每个实例下,Flyweight可以作为一个独立的对象。
  • 相关阅读:
    Reflector8使用技术
    Rose UML 活动图的画法
    .NET 4.0里异常处理的新机制-处理P/Invoker调用异常处理
    数据结构-树的相关算法
    Project 2013 使用大全
    .NET C#开发Activex系列之一:Activex发展背景
    C# Activex开发、打包、签名、发布
    Project 2013 理论基础
    UML类图与类的关系
    RUP(Rational Unified Process)统一软件开发过程
  • 原文地址:https://www.cnblogs.com/luozhai714/p/726425.html
Copyright © 2011-2022 走看看