我正在研究模型-视图-控制器设计模式,并且从理论上理解了该模式背后的概念,但我想了解一下人们如何实际将其付诸实践。
维基百科提到了 Wt - Web 工具包、CppCMS 和其他一些使用该模式的标准实现,但是我对这些并不熟悉,我只是希望和
如果有人可以提供一些示例代码(希望是 C++)来实现该模式并解释该模式付诸实践的理论,我将非常感激。
这是我制作的一个简单示例(没有尝试编译它,如果有错误请告诉我):
class Button; // Prewritten GUI element
class GraphGUI {
public:
GraphGUI() {
_button = new Button("Click Me");
_model = new GraphData();
_controller = new GraphController(_model, _button);
}
~GraphGUI() {
delete _button;
delete _model;
delete _controller;
}
drawGraph() {
// Use model's data to draw the graph somehow
}
...
private:
Button* _button;
GraphData* _model;
GraphController* _controller;
};
class GraphData {
public:
GraphData() {
_number = 10;
}
void increaseNumber() {
_number += 10;
}
const int getNumber() { return _number; }
private:
int _number;
};
class GraphController {
public:
GraphController(GraphData* model, Button* button) {
__model = model;
__button = button;
__button->setClickHandler(this, &onButtonClicked);
}
void onButtonClicked() {
__model->increaseNumber();
}
private:
// Don't handle memory
GraphData* __model;
Button* __button;
};
忽略 Button 的实现,基本上这个程序将使用 GraphGUI 来显示按下按钮时会发生变化的图形。假设它是一个条形图,它会变得更高。
由于模型独立于视图(按钮),并且控制器处理两者之间的通信,因此这遵循 MVC 模式。
单击按钮时,控制器通过 onButtonClicked 函数修改模型,Button 类知道在单击按钮时调用该函数。
这样做的好处是,由于模型和视图是完全独立的,每个模型的实现都可以发生巨大的变化,并且不会影响另一个模型,控制器可能只需要进行一些更改。如果本例中的模型根据某些数据库数据计算出某些结果,则单击按钮可能会导致这种情况发生,但按钮实现不必更改。或者,当鼠标悬停在按钮上时,它可以告诉控制器,而不是告诉控制器何时发生单击。无论是什么触发了更改,相同的更改都会应用于模型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)