Flyweight模式之我見

oxygen發表於2007-05-28
今天看了板橋里人的《設計模式之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修改過]

相關文章