--
我觉得这个说法不对啊,如果说你使用了Flyweight模式之后,还反而会增加实例的创建次数,这说明你没用对地方,好好分析一下使用场合吧!
原理的分析上,我赞同你的观点。
[该贴被ynzhangyao于2007年07月08日 23:20修改过]
原理的分析上,我赞同你的观点。
[该贴被ynzhangyao于2007年07月08日 23:20修改过]
看了很多,我觉得banq大哥是从实用的角度去学习和理解各种新的技术,新的问题的,banq大哥说的很多东西都是在实践中经过自己检验的。
不过看了很多,发现在论坛里有个奇怪的现象,姑且认为比较奇怪把:banq大哥好像指责过很多人是错的,不符责任。可是,在论坛中我没有看到过几个banq自己错的帖子。
回顾历史,历史上任何一个权威都范过错,难道banq大哥说的东西就没有一点是不足的?
也许是banq实践中使用过他说过的东西,所以认为能通过实践的都是对的,或者如牛顿一般,比较爱护自己的东西,所以用直流电来压制交流电。
如果是前者,希望banq把自己说的话定位在引导上,不要定位在理论上,因为你也这么批过别人,如果是后者那就有点无理+无聊了
愿共勉之。
[该贴被hulty于2007年07月11日 16:11修改过]
对于flyweight模式的理解,楼主的理解跟原文是一致的,而banq大侠的理解进行了自己的延伸。这也是我看完banq的模式例子后,觉得更迷惑,又回去再看了一遍原著的英文的原因。
对于初学者,确实容易造成该模式基本构造原理的误解,而banq提倡的就是学模式要掌握其构造原理的。
>>1. Flyweight是减少内存的使用量的一种模式,间接的可能会提高性能。两者没有必然联系。
对,你说的也没有错,说白了就是节约内存吧,最后导致性能提升,说它是节约内存没钱,说它是提高性能也没有错,GoF模式也是几个人工作几年归纳出来的一些看法,它们说的不一定就是绝对的对,每个人的意见可以不同呀,你们死扣概念我看是书呆子
这个你说的也没有错,复用,也可以认为是共享呀,这个对象用完了,别的对象还可以,虽然不是同时被多个人使用,但也是被反复使用,flyweight也是被反复使用,只是能同时被多个人使用而已,这点你们也要讨论个你死我活?
之所以这样,我想可能是因为这些对象本身太特殊了,它不让同时多个人使用,所以才出现使用上的一些小差异,不管怎么样,还是不创建多个,就一个放在内存中,被多次使用,我觉的这就已经是fly了,你们还想怎么样才叫fly
==============
“我再一些英文资料是看到将Flyweight和cache/Poll 区分,我个人觉得没有意义,其实大道至简,Flyweight模式从字面上就可以知晓,将Weight实现Fly,就是将重的东西飞起来,轻量起来,那么什么是weight呢?无疑耗费内存,影响性能的东西是weight,那么怎么fly飞起来呢?就是将之事先创建在内存中或重用(这只是两种手段,手段方式可以多样,重要结果是fly)”
==============
我一直以为设计模式所注重的是解决问题的方法,但是从banq的回复中我却觉得似乎更应该注重问题解决的结果。
我对设计模式的认识浅薄,现在的疑惑令我感觉站在分岔路口上。谁能给我指明一个方向?
万分感激啊!
当解决问题的方法有多个难以抉择时,或者难以辨别时,就需要引入为什么使用模式 模式目的等这样本质问题来进行裁决。
再说了站在一个哲学的角度来说,世界上根本不存在完全正确的东西,GOF设计模式也不一定就全部是正确的,只要我们领会了设计模式的思想,遇到具体的问题,然后具体对待。
我完全同意oxygen对flyweight的模式说明,和GoF的原文理解很一致。因为GoF原书(英文原版)中,用到的例子就是文字排版的软件,这种使用方式至少不会用到Cache这种东西,这是俩马事!
还有一点,我希望bang在对待学问的时候,不要从咬文嚼字的观点来揭示一个学术或者技术性问题,那样显得很幼稚。flyweight就是flyweight,何必拆开,然后从让weight可以fly的观点解释一个技术性词语呢?那你姓名,我们难道都要这么分析么?
还是那句话,做学问也好,做技术也好,要的是面对不足,错误,然后在改进,你天天说中国软件业需要正确的领路人,需要真正的软件理念,那么既然这么多人把这里当成了吸收养分的地方,我希望,如果你有不足,就虚心学习请教,你也不是什么大师,我们也不是真的那么没有能力的程序员。只不过,大家有一个平台可以互相学习,如果说,有人提出一点异议,你就如此的对待,那我相信,更多的高手,选择的是离开,而真正需要高手知道的人就缺少了这方面的机会,这也是为什么csdn可以做很好的原因!
你是做java的,我们知道,但是,搞得有派别,比如你崇尚DDD之类的设计理念,你可以推广,但是不能抨击其他的部队,我看很多网友有自己的理解理念,你却一直话语中不断地推广DDD,EJB,还有你的Jive框架。
老话一句:天外有天,人外有人。