本文主要是介绍Flyweight模式之我见,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
摘自 http://www.jdon.com/31903
Flyweight模式之我见
今天看了板桥里人的《设计模式之Flyweight(享元) FlyWeight模式
》一文,发现其中的理解有些偏差,因此在这里谈一谈自己的看法。
Flyweight的目的是为了减少内存的消耗而出现的一种模式。因此他是一种解决实现问题的模式,而不是用来解决建模问题的。
在文章的例子中说class CD是接口 Flyweight,而class Artist是ConcreteFlyweight。那就完全错了。
按照Flyweight模式,Flyweight和ConcreteFlyweight是继承关系。
而文中却成了聚合关系。
Flyweight模式中,最重要的是将对象分解成extrinsic和intrinsic两部分
在Flyweight Interface中,应该是和context有关的操作,而在例子中,看不到任何和context有关的操作。
可 见作者是将flyweight模式和object pool等同起来了。但实际上两者是由本质区别的。object pool中的对象并没有extrinsic,也不知道context的存在。比如最常见的string pool。pool中的string可以用在任何地方。
希望板桥里人先生本着对读者负责的精神,能够修改上文。
以上。
[该贴被oxygen于2007年05月28日 19:40修改过]
哪些超出了原著的中定义?请列举。
我会告诉你出处的。
2个从基本原理,到运用场合都不同的东西,解决的问题也截然不同,怎么个具象和抽象呢?
你说这是具象和抽象的关系,能具体说说怎么个具象法吗?
难道就是在改善性能吗?
而且我也已经说过了,flyweight和性能没有必然联系。
在这里引用一下原著中flyweight的意图
Use sharing to support large numbers of fine-grained objects efficiently。
pool里有sharing吗?
cache里有sharing吗?
pool和large numbers of objects也没什么关系,这个我前面已经详细说过了。
原著里通篇都没有提到“performance”一词,只在注释里提到一次。说的是外部特性的管理,和flyweight也没什么关系。
我不知道你的这些结论是怎么得到的。
这篇关于Flyweight模式之我见的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!