我有一组类,表示文件中字体格式的存储。每种字体定义一组字形(映射到 UTF32 代码的形状)。
字形可以用轮廓(在我的例子中是一组贝塞尔曲线)或位图来表示。
我的第一个想法是这将导致 GlyphOutline 和 GlyphBitmap 类继承自 Glyph。
这种设计的唯一问题是没有通用的方法。为了对这两个类做任何有用的事情,我需要使用 rtti (我宁愿避免)。
我的问题是:你能想出更好的方法来表示字形/是否有一些设计模式可以处理这种情况?
我试图让这种语言变得不可知,但如果有什么区别的话,我正在用 C++ 编写。
编辑:
我考虑过使用泛型,其中 Glyph 包含对一些/许多 GlyphRepresentations 的引用,其中 T 是轮廓或位图或您可以用来表示字形的任何其他内容。我实际上非常喜欢这个解决方案,因为它解决了由轮廓和位图表示的字形的问题。然而,它会强制使用 rtti。
如果我使用 C#,反射非常美妙,这可能是我会选择的解决方案,但在 C++ 环境中,我工作的 rtti 被实现为一组非常复杂的宏,我相信你可以了解我非常想避免
编辑:
在回答oli时,我在某种程度上同意你的观点,但是isa关系(如GlyphOutline是一个字形,并且可以做字形可以做的一切)是存在的,我认为这意味着应该有继承?我对此不太确定,似乎无论哪种方式都有很好的论据。
到目前为止,我首选的解决方案是访问者模式,但这只是一条评论,而不是自动取款机的答案,我想再等一会儿,看看是否有其他解决方案浮出水面。
最佳答案
听起来好像诸如drawOnScreen()
、getMetrics()
、getCodePoint()
之类的方法是多态行为的良好候选者。
关于c++ - 派生自同一类但不共享公共(public)方法的两个对象的类设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9429364/