📄 flyweight.c
字号:
/**/#include "defs.H"class Window;class GlyphContext;class Font { public: Font(char*);};class BTree;/**/class Glyph {public: virtual ~Glyph(); virtual void Draw(Window*, GlyphContext&);/**/ virtual void SetFont(Font*, GlyphContext&); virtual Font* GetFont(GlyphContext&);/**/ virtual void First(GlyphContext&); virtual void Next(GlyphContext&); virtual bool IsDone(GlyphContext&); virtual Glyph* Current(GlyphContext&);/**/ virtual void Insert(Glyph*, GlyphContext&); virtual void Remove(GlyphContext&);protected: Glyph();};/**/class Character : public Glyph {public: Character(char); virtual void Draw(Window*, GlyphContext&);private: char _charcode;};/**/class GlyphContext {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;};/**/void dummy () {/**/GlyphContext gc;Font* times12 = new Font("Times-Roman-12");Font* timesItalic12 = new Font("Times-Italic-12");// ...gc.SetFont(times12, 6);/**/gc.Insert(6);gc.SetFont(timesItalic12, 6);/**/}/**/class Row {};class Column {};/**/const int NCHARCODES = 128;class GlyphFactory {public: GlyphFactory(); virtual ~GlyphFactory();/**/ virtual Character* CreateCharacter(char); virtual Row* CreateRow(); virtual Column* CreateColumn(); // ...private: Character* _character[NCHARCODES];};/**/GlyphFactory::GlyphFactory () { for (int i = 0; i < NCHARCODES; ++i) { _character[i] = 0; }}/**/Character* GlyphFactory::CreateCharacter (char c) { if (!_character[c]) { _character[c] = new Character(c); } return _character[c];}/**/Row* GlyphFactory::CreateRow () { return new Row;}/**/Column* GlyphFactory::CreateColumn () { return new Column;}/**/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -