尽管我使用 C++ 编程,但这更多是关于设计的一般性问题。
我注意到当我有一对一关联关系的对象时,它们之间往往会有很多通用方法,导致样板代码基本上直接调用内部类的方法。
例如,我有一个名为的类Tab
,它代表一个选项卡,它是相应的小部件。我还有一个叫做Tabbable
对象可以继承的类,因此它们可以显示在选项卡中。然后ATab
可以获取该Tabbable
对象并正确渲染自己。例如,这两个类都有很多与标题或图标相关的类似方法。
class ITabbable {
public:
ITabbable();
virtual ~ITabbable();
virtual string getTitle() = 0;
virtual widget getContentWidget() = 0;
// etc...
}
class Tab {
public:
Tab(ITabbable* tabbableObject);
// lots of boilerplate code:
string getTitle() {
return m_tabbableObject->getTitle();
}
widget getContentWidget() {
return m_tabbableObject->getContentWidget();
}
// etc...
private:
ITabbable* m_tabbableObject; // association relationship
}
很多代码是重复的,似乎没有必要。继承在这里肯定行不通,因为你不能把 a Tab
in Tab
。
这只是我们必须处理的事情吗?或者有没有办法解决这些情况?