当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:15:00  来源:本站整理

筹划情势之Flyweight[Java编程]

赞助商链接



  本文“筹划情势之Flyweight[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

Flyweight定义:

避免大量拥有相同内容的小类的开销(如耗费内存),使大家同享一个类(元类).

为什么利用?

面向对象语言的原则就是一切都是对象,但是假如真正利用起来,有时对象数大概显得很宏大,比方,字处理软件,假如以每个文字都作为一个对象,几千个字,对象数就是几千,无疑耗费内存,那么我们还是要"求同存异",找出这些对象群的共同点,计划一个元类,封装可以被同享的类,别的,还有一些特点是取决于利用(context),是不可同享的,这也Flyweight中两个重要概念内部状况intrinsic和外部状况extrinsic之分.

说白点,就是先捏一个的原始模子,然后随着差别场所和环境,再产生各具特点的具体模子,很明显,在这里需求产生差别的新对象,所以Flyweight情势中常呈现Factory情势.Flyweight的内部状况是用来同享的,Flyweight factory负责保护一个Flyweight pool(情势池)来存放内部状况的对象.

Flyweight情势是一个提高程序效率和性能的情势,会大大加快程序的运行速度.利用场所很多:比方你要从一个数据库中读取一系列字符串,这些字符串中有很多是反复的,那么我们可以将这些字符串储存在Flyweight池(pool)中.

若何利用?

我们先从Flyweight抽象接口开始:

public interface Flyweight
{
  public void operation( ExtrinsicState state );
}
//用于本情势的抽象数据范例(自行计划)
public interface ExtrinsicState { }

下面是接口的具体实现(ConcreteFlyweight) ,并为内部状况增添内存空间, ConcreteFlyweight必须是可同享的,它保存的任何状况都必须是内部(intrinsic),也就是说,ConcreteFlyweight必须和它的利用环境场所无关.

public class ConcreteFlyweight implements Flyweight {
  private IntrinsicState state;
  public void operation( ExtrinsicState state )
  {
      //具体操作
  }
}

当然,并非全部的Flyweight具体实现子类都需求被同享的,所以还有别的一种不同享的ConcreteFlyweight:

public class UnsharedConcreteFlyweight implements Flyweight {
  public void operation( ExtrinsicState state ) { }
}

Flyweight factory负责保护一个Flyweight池(存放内部状况),当客户端恳求一个同享Flyweight时,这个factory首先搜索池中能否已经有可实用的,假若有,factory只是简单返回送出这个对象,不然,成立一个新的对象,加入到池中,再返回送出这个对象.

public class FlyweightFactory {
  //Flyweight pool
  private Hashtable flyweights = new Hashtable();
  public Flyweight getFlyweight( Object key ) {
    Flyweight flyweight = (Flyweight) flyweights.get(key);
    if( flyweight == null ) {
      //产生新的ConcreteFlyweight
      flyweight = new ConcreteFlyweight();
      flyweights.put( key, flyweight );
    }
    return flyweight;
  }
}


  以上是“筹划情势之Flyweight[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 深化浅出基于Java的制作筹划情势
  • Java筹划情势之Observer情势
  • <b>深化浅出Java筹划情势之迭代器情势</b>
  • Java筹划情势之Visitor情势
  • Java筹划情势之Interpreter(注释器)情势
  • <b>Java筹划情势之Strategy(战略)情势</b>
  • Java筹划情势之工厂办法情势
  • Java筹划情势之中介者情势
  • Java筹划情势之计数代理情势
  • Java筹划情势之虚拟代理情势
  • 在Java中操纵Factory Method筹划情势
  • <b>筹划情势之Facade(外观)</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .