mvc设计模式的简单领悟

引言

mvc设计模式,是将数据模型与视图分离,通过控制器来建立起数据模型与视图之间的联系,当数据模型变化自动更新视图。其中M-数据模型,V-视图,C-控制器。下面是一个简单的对于MVC设计模式的使用。

示例

开发环境是QtCreator6.0.2。创建控制台输出程序,设置项目的运行环境为run in terminal.程序启动的时候可以开启终端,对应的程序的运行结果,在终端查看。下面是实现代码。
main.cpp

#include 
#include 
#include 
#include "mvcstudent.h"
//using namespace std;

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    //设计模式-MVC
    MVCstudent student;

    return a.exec();
}

studentmodel.h

#ifndef STUDENTMODEL_H
#define STUDENTMODEL_H
#include 


class StudentModel
{
public:
    StudentModel();
    void setStudentName(QString name);
    void setStudentNumber(int num);

    QString getStudentName();
    int getStudentNum();
private:
    QString m_strName;
    int m_nNumber;
};

#endif // STUDENTMODEL_H

studentmodel.cpp

#include "studentmodel.h"

StudentModel::StudentModel()
{

}

void StudentModel::setStudentName(QString name)
{
    m_strName = name;
}

void StudentModel::setStudentNumber(int num)
{
    m_nNumber = num;
}

QString StudentModel::getStudentName()
{
    return m_strName;
}

int StudentModel::getStudentNum()
{
    return m_nNumber;
}

studentview.h

#ifndef STUDENTVIEW_H
#define STUDENTVIEW_H
#include 

class StudentView
{
public:
    StudentView();
    void outputStudentInfo(QString name,int studentId);
};

#endif // STUDENTVIEW_H

studentview.cpp

#include "studentview.h"

StudentView::StudentView()
{

}

void StudentView::outputStudentInfo(QString name,int studentId)
{
    qDebug("学生信息:姓名:%s|学号:%d",qPrintable(name),studentId);
}

studentcontroller.h

#ifndef STUDENTCONTROLLER_H
#define STUDENTCONTROLLER_H
#include "studentmodel.h"
#include "studentview.h"
#include 


class StudentController
{
public:
    StudentController();
    StudentController(StudentModel model,StudentView view);

    void setStudentName(QString name);
    void setStudentId(int num);
    QString getStudentName();
    int getStudentId();
    void updateView();
private:
    StudentModel m_studentModel;
    StudentView m_studentView;
};

inline void StudentController::setStudentId(int num)
{
    m_studentModel.setStudentNumber(num);
}

#endif // STUDENTCONTROLLER_H

studentcontroller.cpp

#include "studentcontroller.h"

StudentController::StudentController()
{

}

StudentController::StudentController(StudentModel model, StudentView view)
{
    m_studentModel = model;
    m_studentView = view;
}

void StudentController::setStudentName(QString name)
{
    m_studentModel.setStudentName(name);
}

QString StudentController::getStudentName()
{
    return m_studentModel.getStudentName();
}

int StudentController::getStudentId()
{
    return m_studentModel.getStudentNum();
}

void StudentController::updateView()
{
    m_studentView.outputStudentInfo(m_studentModel.getStudentName(),m_studentModel.getStudentNum());
}

mvcstudent.h

#ifndef MVCSTUDENT_H
#define MVCSTUDENT_H
#include "studentmodel.h"
#include "studentview.h"
#include "studentcontroller.h"

class MVCstudent
{
public:
    MVCstudent();
    StudentModel getStudentData();
};

#endif // MVCSTUDENT_H

mvcstudent.cpp

#include "mvcstudent.h"

MVCstudent::MVCstudent()
{
    StudentModel model = getStudentData();
    StudentView view;
    StudentController controller(model,view);
    controller.updateView();
    controller.setStudentName("及时的");
    controller.updateView();
}

StudentModel MVCstudent::getStudentData()
{
    StudentModel model;
    model.setStudentName("护士电话");
    model.setStudentNumber(12412);
    return model;
}

以上是mvc设计模式中简单的一个实现。

项目结构

项目的结构如下图所示;
mvc设计模式的简单领悟_第1张图片

运行结果

由于项目是控制台输出应用程序,所以设置程序可以运行在终端,设置方法:在左边栏中点击项目,然后出下图所示窗口,选中Build&Run下的Run,然后在运行设置中的run in terminal前打勾。

运行结果如下图:
mvc设计模式的简单领悟_第2张图片

领悟

此篇是关于MVC设计模式的初步探索,其宗旨是将视图与数据模型分离,通过控制器将数据模型与视图建立联系,也就是将和界面显示相关的代码封装在视图类中,将显示用的数据封装在数据模型中,控制器类来建立数据模型与视图之间的联系,当数据模型变化的时候更新视图,这就需要在控制器类中含有数据模型与视图对象作为数据成员,通过控制器提供的公共接口函数可以操作数据模型,故而提供了设置函数,在设置函数内部调用数据模型类的设置函数,来改变数据模型类中的成员变量值,此外可以通过控制器类中的更新函数来更新界面的显示,即更新视图,通过控制器的成员变量视图类对象来调用视图类中的界面显示函数。最后需要在使用时定义数据模型类对象,视图对象,控制器对象,通过控制器来改变数据模型,进而更新视图显示。
以上是自己的一些初步理解。

你可能感兴趣的:(C++,Qt,mvc)