我正在一个项目中工作,我有一个设计问题,我不知道如何解决。我想找到代码可扩展性的最佳解决方案。 该项目包含一个带有选项卡的Web浏览器,但在选项卡中不仅有网页,还可以有其他类型的窗口小部件。 我正在使用Qt,因此选项卡中的小部件是QWidgets(QWebview和其他类型,我仍然需要自己编码)。无论如何,我会尽量保持这个问题的通用性。设计问题:将特定处理应用于子类只操作超类
有两个类继承的类QWidget:QWebView和MyWidget。 我有一个容器(QTabWidget),可以包含它们两个,因为它可以包含QWidgets。 此外,我有一个按钮(例如上一页按钮),它只适用于一种QWidget:QWebView。 所以,当我按下这个按钮时,我会问QTabWidget当前的QWidget,如果它的QWebView我做了什么,否则我什么也没做。 这就是问题所在:我需要能够区分两种不同的类型:如果我要求QTabWidget向我提供currentWidget,它会给我一个QWidget *,但我不知道它是一个QWwbView还是一个MyWidget所以我必须做一个讨厌的dynamic_cast <>来检查真实的类型。 这意味着如果我添加一个新的MyWidget2与另一个动作,我将不得不更新所有我的代码dynamic_cast <>,我不想这样做。
我一直在考虑命令模式和startegy模式,但我不认为它们真的很好。
你有什么建议吗? 谢谢
谢谢。但你是我没有得到的:我的超类的虚函数是如何返回相关的行为的?它是一个数据结构?我不明白,对不起。 – ddeunagomez
@ excalibur1491:我正在设想制作一个数据结构来表示动作,为每个控件类型返回一组这样的动作,然后使用当前控件的动作在切换控件时更新一组按钮。我承认我并没有把它压在那里 - 它需要充实一点。 –