允许库分离的多态行为设计模式
假设我有一个Item类的层次结构:Rectangle, Circle, Triangle。我希望能够绘制它们,所以我的第一种可能是Draw()向每个虚拟方法添加一个虚拟方法: class Item { public: virtual ~Item(); virtual void Draw() =0; }; 但是,我想将绘图功能拆分到单独的Draw库中,而Core库仅包含基本表示形式。我可以想到几种可能性: 1-A DrawManager接受Items 的列表,必须使用它dynamic_cast<>来确定要做什么: class DrawManager { void draw(ItemList& items) { FOREACH(Item* item, items) { if (dynamic_cast<Rectangle*>(item)) { drawRectangle(); } else if (dynamic_cast<Circle*>(item)) { drawCircle(); } .... } } }; 这不是理想的选择,因为它依赖于RTTI并迫使一个类了解层次结构中的所有项。 2-另一种方法是将绘图责任推迟到一个ItemDrawer层次结构(RectangleDrawer,等): class Item { virtual …