Chinaunix首页 | 论坛 | 博客
  • 博客访问: 468068
  • 博文数量: 724
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(724)

文章存档

2011年(1)

2008年(723)

我的朋友

分类:

2008-10-13 16:56:52


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上了。

posted on 2006-09-08 19:00 Abbey的网络日志 阅读(408)   


--------------------next---------------------

阅读(258) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~