筹划情势之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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |