以将该属性外部存储于GlyphContext对象中 实现:GlyphContext是一个外部状态的存储库,它维持Glyph与字体之间的一种简单映射关系。 使用:对于任何操作,如果它需要知道在给定场景下Glyph字体,都会有一个GlyphContext实例作为参数传递给它。然后该操作就可以查询GlyphContext以获取该场景中的字体信息了。 注意:当使用Glyph时,Glyph子类的迭代和管理操作必须更新GlyphContext。 class Glyph {
public:
GlyphContext();
virtual ~GlyphContext();
virtual void Next(int step = 1);
virtual void Insert(int quantity = 1);
virtual Font* GetFont();
virtual void SetFont(Font*, int span = 1);
private:
int _index;
BTree* _fonts;
}; Btree: 存储Glyph到字体的映射。树中的每个节点都标有字符串的长度,而向这个字符串传递字体信息。树中的叶节点指向一种字体,而内部的字符串分成了很多子字符串,每一个对应一种叶节点。 文本信息如下: 
Btree结构可能如下图所示: 
假设遍历到索引102。 目标1:将“except”的字体设置为“Time 12”字体。 代码如下: GlyphContext gc;
Font* time12 = new Font("Times-Roman-12");
Font* timeItalic12 = new Font("Times-Italic-12");
// ...
gc.SetFont(times12, 6); 新的Btree结构如下所示(黑体表示变动): 
目标2:在单词“expect”前用12-point Times Itali y"http://www.2cto.com/kf/yidong/wp/" target="_blank" class="keylink">WPX1szlzO2809K7uPa1pbTKRG9u"t(包含一个紧跟着的空格)。假定gc仍在索引位置102 代码: gc.Insert(6);
gc.SetFont(timesItalic12, 6);
变动后的Btree结构: 
使用Btree结构的优点: