C++设计模式:MVC 模式
MVC 模式
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
Model(模型) - 模型代表一个存取数据的对象。它也可以带有逻辑,在数据变化时更新控制器。
View(视图) - 视图代表模型包含的数据的可视化。
Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
使用场景
Web开发领域。
移动互联开发。
与交互相关的开发,关注资源的调用和响应,注重系统的稳定性和可扩展性的较大型项目。
优缺点
优点:
1、耦合性低。
2、重用性高。
3、生命周期成本低。
4、部署快。
5、可维护性高。
6、有利软件工程化管理。
缺点:
1、没有明确的定义。
2、不适合小型,中等规模的应用程序。
3、增加系统结构和实现的复杂性。
4、视图与控制器间的过于紧密的连接。
5、视图对模型数据的低效率访问。
6、一般高级的界面工具或构造器不支持此模式。
注意事项
所有关于数据库的操作都在模型里面做,不涉及到数据库的在控制器中完成。
UML结构图
代码实现
student.h
创建类 Student,可获取姓名和编号,作为模型Model
#include <string>
using namespace std;
class Student
{
public:
string getName() { return name; }
string getRollNo() { return rollNo; }
void setName(string name) { this->name = name; }
void setRollNo(string rollNo) { this->rollNo = rollNo; }
private:
string name;
string rollNo;
};
studentview.h
创建类 StudentView,可输出学生信息,作为视图View
#include <string>
#include <iostream>
using namespace std;
class StudentView
{
public:
void printStudentDetails(string studentName, string studentRollNo)
{
cout << "Student: ";
cout << "Name: " + studentName;
cout << ", Roll No: " + studentRollNo << endl;
}
};
studentcontroller.h
创建类 StudentController,可修改model数据,更新view
#include "student.h"
#include "studentview.h"
class StudentController
{
public:
StudentController(Student model, StudentView view)
{
this->model = model;
this->view = view;
}
void setStudentName(string name)
{
model.setName(name);
}
string getStudentName()
{
return model.getName();
}
void setStudentRollNo(string rollNo)
{
model.setRollNo(rollNo);
}
string getStudentRollNo()
{
return model.getRollNo();
}
void updateView()
{
view.printStudentDetails(model.getName(), model.getRollNo());
}
private:
Student model;
StudentView view;
};
main.cpp
实例应用 - 通过control修改数据后,更新view显示
#include "studentcontroller.h"
int main()
{
Student *model = new Student();
model->setName("Billy");
model->setRollNo("18");
StudentView *view = new StudentView();
StudentController *controller = new StudentController(*model, *view);
controller->updateView();
controller->setStudentName("John");
controller->updateView();
return 0;
}
运行结果:
Student: Name: Billy, Roll No: 18
Student: Name: John, Roll No: 18
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
相关文章
- C++单例模式的问题
- C++ main函数命令行参数使用
- c++ boost 汉字和模式串混用的例子
- C++设计模式5--单例模式Singleton--当前对象只有一个实例
- C++设计模式9--代理模式--万能的中间层
- C/C++基础讲解(六十三)之图形篇(图形时钟)
- c++文件操作3之二进制写文件
- 历届真题 小朋友崇拜圈【第九届】【省赛】【C组】——【C++】【C】【Java】【Python】四种语言解法
- C++设计模式:享元模式
- C++设计模式:策略模式
- C++设计模式:服务定位器模式
- C++设计模式:组合模式
- C++ 单例模式总结与剖析
- c++ 命名空间 using namespace std 是什么意思?
- 编程基础——C/C++,Java,ObjC讨论回调模式
- VC++如何实时监测另一个进程是否已经退出?(附源码)
- C++软件调试与异常排查从入门到精通系列文章汇总
- Windows 7中使用Eclipse 使用CDT and WinGW 开发C/C++(转载)
- TensorFlow Lite demo——就是为嵌入式设备而存在的,底层调用NDK神经网络API,注意其使用的tf model需要转换下,同时提供java和C++ API,无法使用tflite的见后
- Webrtc Native C++在root模式下启用PulseAudio,音频采集替换为ALSA模式
- C++状态模式
- 裘千尺裘千仞裘千丈与杨过篇--责任链模式C++实现
- C++命令模式
- 由后序遍历序列和中序遍历序列,构建二叉树【C++版】
- ShiDianNao的c++实现