Model-View-Controller : 模型-视图-控制器模式,用于应用程序的分层开发。
Model(模型):代表一个存取数据的对象。也可以带有逻辑,在数据变化时更新控制器。
View(视图):代表模型包含的数据的可视化。
Controller(控制器):作用于模型和视图之上。控制数据流向模型对象,并在数据变化时更新视图。使视图与模型分离开。
/*
StudentModel 模型类
StudentView 视图类,把学生详细信息输出到控制台
StudentController 控制器类,存储数据到Student对象,并更新视图StudentView
*/
//创建模型 StudentModel.cpp
#include <stdio.h>
#include <string.h>
class StudentModel
{
public:
int getRollNo() {
return _rollNo;
}
void setRollNo(int rollNo) {
_rollNo = rollNo;
}
char * getName() {
return _name;
}
void setName(char * name) {
_name = new char[strlen(name) + 1];
strncpy(_name, name, strlen(name) + 1);
}
private:
int _rollNo;
char * _name;
};
//创建视图 StudentView.cpp
class StudentView
{
public:
void printStudentDetails(char * studentName, int studentRollNo)
{
printf("Name: %s RollNo: %d\n\n", studentName, studentRollNo);
}
};
//创建控制器 StudentController.cpp
class StudentController
{
public:
StudentController(StudentModel model, StudentView view) {
_model = model;
_view = view;
}
void setStudentName(char * name) {
_model.setName(name);
}
char * getStudentName() {
return _model.getName();
}
void setStudentRollNo(int rollNo) {
_model.setRollNo(rollNo);
}
int getStudentRollNo() {
return _model.getRollNo();
}
void updateView() {
_view.printStudentDetails(_model.getName(), _model.getRollNo());
}
private:
StudentModel _model;
StudentView _view;
};
int main(void)
{
StudentModel model;
model.setName("Robert");
model.setRollNo(10);
StudentView view;
StudentController controller(model, view);
controller.updateView();
//更新模型数据
controller.setStudentName("John");
controller.updateView();
return 0;
}