mvc设计模式的简单领悟

引言

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

示例

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

#include <QCoreApplication>
#include <iostream>
#include <QDebug>
#include "mvcstudent.h"
//using namespace std;int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//设计模式-MVCMVCstudent student;return a.exec();
}

studentmodel.h

#ifndef STUDENTMODEL_H
#define STUDENTMODEL_H
#include <QString>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 <QString>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 <QString>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设计模式中简单的一个实现。

项目结构

项目的结构如下图所示;
在这里插入图片描述

运行结果

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

领悟

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/523703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

添加远程库

现在的情景是&#xff0c;你已经在本地创建了一个Git仓库后&#xff0c;又想在GitHub创建一个Git仓库&#xff0c;并且让这两个仓库进行远程同步&#xff0c;这样&#xff0c;GitHub上的仓库既可以作为备份&#xff0c;又可以让其他人通过该仓库来协作&#xff0c;真是一举多得…

微服务精华问答 | 什么是金丝雀释放?

戳蓝字“CSDN云计算”关注我们哦&#xff01;微服务(Microservice Architecture)是近几年流行的一种架构思想,关于它的概念很难一言以蔽之。今天&#xff0c;就让我们来看看关于微服务更加有深度的问题吧。1Q&#xff1a;什么是金丝雀释放&#xff1f;A&#xff1a;Canary Rele…

Git 远程配置

Git 配置篇02_远程配置 git 远程配置 2种方案 码云 Github 案例演示 码云 Github更改用户名和邮箱即可 任选1种 第1步&#xff1a;生成SSH key 输入下边命令一直回车&#xff08;4次回车&#xff09; ## 码云配置方案&#xff1a; ssh-keygen -t rsa -C "13396492261163…

虚拟器件—虚拟化技术的新利刃 | 时光机

戳蓝字“CSDN云计算”关注我们哦&#xff01;时光机&#xff1a;搭载这部时光机&#xff0c;带您回顾《程序员》大量优秀文章&#xff0c;重温经典技术干货&#xff0c;我们发现硬核技术永不过时&#xff0c;对于get要点、solve难题、提高自我&#xff0c;仍有非凡意义。作者&a…

git从远程库克隆

首先&#xff0c;登陆GitHub&#xff0c;找到我们的learngit项目 第一种方式(老手建议)&#xff1a;通过命令将远程仓库的代码&#xff0c;拉取到本地&#xff0c;文件夹形式。 第二种方式(入门建议)&#xff1a;将远程的项目代码下载到本地&#xff0c;压缩包形式。 复制…

图解分布式架构的发展和演进 | 技术干货

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;编注: 架构决定的系统的稳定性&#xff0c;扩展性和并发性&#xff0c;架构的演进是从…

C++中链表反转2

引言 周期按我也写过类似链表反转的文章&#xff0c;这个链表反转是在第二次写的时候写的&#xff0c;由于都是靠当时的思路&#xff0c;两个在代码实现上有所差异&#xff0c;仅以记录。 示例 编程环境 在vs2010下编写的C控制台输出程序&#xff0c;文件名由main.cpp改为t…

阿里云PolarDB重大更新:两大技术突破,传统数据库一键迁移上云

5月21日&#xff0c;阿里云PolarDB发布重大更新&#xff0c;提供传统数据库一键迁移上云能力&#xff0c;可以帮助企业将线下的MySQL、PostgreSQL和Oracle等数据库轻松上云&#xff0c;最快数小时内迁移完成。据估算&#xff0c;云上成本不到传统数据库的1/6。目前&#xff0c;…

Spring精华问答 | Spring Bean的自动装配是怎么回事?

戳蓝字“CSDN云计算”关注我们哦&#xff01;Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而&#xff0c;Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言&#xff0c;绝大部分J…

华为正准备发布属于自己的手机操作系统;腾讯已经交出了首张产业互联网成绩单……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 第二代Google Glass 企…

qt实现QLabel上显示的文字有描边

qt实现文字描边效果图开发环境项目示例综述效果图 此程序运行的效果。 开发环境 1.关于我的开发环境&#xff0c;我目前有点迷惑&#xff0c;我的QtCreator中帮助-》关于QtCreator&#xff0c;得到如下所示&#xff1a; 但是我的安装包上却写着5.12.9 我的理解就是qt版本是…

kappa和lambda对比 | 程序员硬核评测

戳蓝字“CSDN云计算”关注我们哦&#xff01;程序员硬核评测&#xff1a;客观、高效、不说软话。无论是技术质量、性能水平&#xff0c;还是工具筛选&#xff0c;一测便知&#xff01;作者&#xff1a;浪尖转载&#xff1a;Spark学习技巧首先我们会详细的讲解这两种架构&#x…

git提交代码的时候出现fatal: Could not read from remote repository.

引言 当在git使用中出现这样的提示的解决方法。 解决方法 我采用重新获取ssh-key的方法&#xff0c;关于具体的操作&#xff0c;可以查看博文&#xff1a; https://www.cnblogs.com/janve/p/10946630.html。 实际上具体的步骤&#xff0c;就是下面几句&#xff1a; ssh-key…

边缘计算精华问答 | 火爆的边缘计算为何兴起?

戳蓝字“CSDN云计算”关注我们哦&#xff01;随着物联网在全球各行业中越来越普遍&#xff0c;企业们发现了云计算的不足&#xff0c;它不是解决所有问题的答案。此外&#xff0c;如果只有云计算&#xff0c;物联网项目不能充分发挥其潜力&#xff0c;特别是在实时分析&#xf…

腾讯优图贾佳亚:当AI进入产业应用时代时,计算机视觉技术更应该服务于人才对!...

戳蓝字“CSDN云计算”关注我们哦&#xff01;从移动支付的自动贩卖机到刷脸支付的智能货柜&#xff1b;从亲自到柜台验证到人脸核身远程开卡&#xff1b;从排队买票、排队进门的糟糕旅游体验到提前预约&#xff0c;刷脸入园的智慧旅游……在昆明的腾讯全球数字生态大会AI 分论坛…

使用AWS CloudWatch 调优Lambda函数 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;译者&#xff1a;风车牛马整理&#xff1a;刘丹Kyle Galbraith&#xff0c;高级软件工…

ARM到底是一家什么样的公司?

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;小枣君转自&#xff1a;鲜枣课堂这两天&#xff0c;一家叫做ARM的公司…

Visual Studio中输入英文会在字母之间自动增加空格

现象 不小心按了什么键之后字母之间增加了空格&#xff0c;如下面&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/b211b973b9c8470fae4402161ddb3935.png 解决办法 针对上面图片中显示的这种英文字母之间出现空格&#xff0c;是输入法出现了问题。恢复的…

C中指针与成员变量生命周期的示例

引言 本文针对于碰到的指针做一些记录。详见下面的示例。 示例一 返回char类型指针&#xff0c;使用局部静态数组。 #include <stdlib.h>char * GetTestMemory(void) {static char p[] "hello world";printf("src%x\n",p);//数组首地址printf(&…

从Spark Streaming到Apache Flink: 实时数据流在爱奇艺的演进 | 技术头条

戳蓝字“CSDN云计算”关注我们哦&#xff01;技术头条&#xff1a;干货、简洁、多维全面。更多云计算精华知识尽在眼前&#xff0c;get要点、solve难题&#xff0c;统统不在话下&#xff01;作者&#xff1a;陈越晨转自&#xff1a;高可用架构本文将为大家介绍Apache Flink在爱…