|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。
GOF:使用共享手艺无效地撑持大批细粒度的对象。
注释一下观点:也就是说在一个体系中假如有多个不异的对象,那末只共享一份就能够了,不用每一个都往实例化一个对象。好比说(这里援用GOF书中的例子)一个文本体系,每一个字母定一个对象,那末巨细写字母一共就是52个,那末就要界说52个对象。假如有一个1M的文本,那末字母是何其的多,假如每一个字母都界说一个对象那末内存早就爆了。那末假如如果每一个字母都共享一个对象,那末就年夜小节约了资本。
在Flyweight形式中,因为要发生林林总总的对象,以是在Flyweight(享元)形式中常呈现Factory形式。Flyweight的外部形态是用来共享的,Flyweightfactory卖力保护一个对象存储池(FlyweightPool)来寄存外部形态的对象。Flyweight形式是一个进步程序效力和功能的形式,会年夜年夜加速程序的运转速率.使用场所良多,上面举个例子:
先界说一个笼统的Flyweight类:
packageFlyweight;
publicabstractclassFlyweight
...
{
publicabstractvoidoperation();
}//endabstractclassFlyweight
在完成一个详细类:
packageFlyweight;
publicclassConcreteFlyweightextendsFlyweight
...
{
privateStringstring;
publicConcreteFlyweight(Stringstr)
...
{
string=str;
}//endConcreteFlyweight(...)
publicvoidoperation()
...
{
System.out.println("Concrete---Flyweight:"+string);
}//endoperation()
}//endclassConcreteFlyweight
完成一个工场办法类:
packageFlyweight;
importjava.util.Hashtable;
publicclassFlyweightFactory
...
{
privateHashtableflyweights=newHashtable();//----------------------------1
publicFlyweightFactory()...{}
publicFlyweightgetFlyWeight(Objectobj)
...
{
Flyweightflyweight=(Flyweight)flyweights.get(obj);//----------------2
if(flyweight==null)...{//---------------------------------------------------3
//发生新的ConcreteFlyweight
flyweight=newConcreteFlyweight((String)obj);
flyweights.put(obj,flyweight);//--------------------------------------5
}
returnflyweight;//---------------------------------------------------------6
}//endGetFlyWeight(...)
publicintgetFlyweightSize()
...
{
returnflyweights.size();
}
}//endclassFlyweightFactory
<p>
windows系统样,他们做了什么事或者留了一些后门程序,谁都不知道,二,java开发是跨平台,任何系统上都可以运行,对于保密型系统和大型系统开发这是必要的 |
|