C++设计模式:MVC模式
MVC 模式
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式⽤于应⽤程序的分层开发。
Model(模型) - 模型代表⼀个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
View(视图) - 视图代表模型包含的数据的可视化。
Controller(控制器) - 控制器作⽤于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
实现
我们将创建⼀个作为模型的 Student 对象。StudentView 是⼀个把学⽣详细信息输出到控制台的视图类,StudentController 是负责存储数据到 Student 对象中的控制器类,并相应地更新视图 StudentView。
MVCPatternDemo,我们的演⽰类使⽤ StudentController 来演⽰ MVC 模式的⽤法。
⽰例代码:
student.h
#pragma once
#include <string>
using namespace std;
class Student
{
public:
string getName() { return name; }
string getID() { return id; }
void setName(string strName) { name = strName; }
void setID(string ID) { id = ID; }
private:
string name;
string id;
};
studentview.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
class StudentView
{
public:
void printStudentDetails(string studenName, string strID)
{
cout << "Student:\nname: " << studenName << "\nID: " << strID << endl; }
};
studentcontroller.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
class Student;mvc的controller
class StudentView;
class StudengController
{
private:
Student* pStudent;
StudentView* pStudnentView;
public:
StudengController(Student* model,StudentView* view);
~StudengController();
void setStudentName(string strName);
void setStudentID(string strID);
string getStudentName();
string getSutdentID();
void updateView();
};
studentcontrolller.cpp
#include "StudentController.h"
#include "Student.h"
#include "StudentView.h"
StudengController::StudengController(Student* model, StudentView* view)
{
pStudent = model;
pStudnentView = view;
}
StudengController::~StudengController()
{
delete pStudent;
delete pStudnentView;
}
void StudengController::setStudentName(string strName)
{
pStudent->setName(strName);
}
void StudengController::setStudentID(string strID)
{
pStudent->setID(strID);
}
string StudengController::getStudentName()
{
return pStudent->getName();
}
string StudengController::getSutdentID()
{
return pStudent->getID();
}
void StudengController::updateView()
{
pStudnentView->printStudentDetails(pStudent->getName(), pStudent->getID());
}
main.cpp
#include "Student.h"
#include "StudentView.h"
#include "StudentController.h"
void main()
{
Student *pStudent = new Student();
StudentView* pStudentView = new StudentView();
StudengController* pStudentController = new StudengController(pStudent, pStudentView); pStudentController->setStudentName("王伟");
pStudentController->setStudentID("001");
pStudentController->updateView();
pStudentController->setStudentName("李芳");
pStudentController->setStudentID("002");
pStudentController->updateView();
delete pStudentController;
int d;
cin >> d;
}
运⾏结果:
Student: name: 王伟ID: 001 Student: name: 李芳ID: 002