Flyweight本来是不太复杂的一个Pattern,却因为我看的几本书中都没有详尽的范例,一直不得其解。今天在ProgrammerHeaven上下载了一个示例程序,才恍然大悟。
Flyweight Pattern是用来有效减少重复性对象的。按我现在的理解,Flyweight Pattern就象是Cache的工作方式,或者说Cache正是Flyweight Pattern的典型应用。
CPU Cache相信很多人都了解的,包括一些硬件DIYer,而不仅仅是我们这些“软蛋”。Cache的工作原理可以简单表述为:CPU需要读取数据Data;CPU首先在Cache中寻找Data;Cache中有Data(被称为“命中”),于是Cache将Data传递给CPU;Cache中没有CPU要的Data,Cache从外部存储设备获取Data,并更新Cache本身,将Data存入Cache内部,等待下一次命中。
对应于Flyweight Pattern(自己找张Flyweight Pattern的结构示意图吧):
* CPU是Client;
* Cache是FlyweightFactory;
* Data是Flyweight。
Flyweight Pattern中,Flyweight包括可共享的与不可共享的两类对象。套用关系数据库中的术语,可以这么说:
* 对于可共享的Flyweight,其内部的数据与状态应当是符合第三范式的(3NF)的,其表达不依赖于其他对象或上下文。
* 对于不可共享的Flyweight,它则通常是依赖于一个可共享的Flyweight来完成一个更丰富、更完整的表达的。
我当时之所以对Flyweight Pattern百思不得其解,是错误地将注意力放到了GoF中可共享的Character对象及存储其字体信息的GlyphContext上了。
--------------------next---------------------
阅读(258) | 评论(0) | 转发(0) |