C++ 设计模式:MVC模式

本文深入解析了MVC(模型-视图-控制器)模式,这是一种广泛应用于软件开发,特别是Web应用开发中的设计模式。文章通过实例代码展示了MVC模式如何帮助开发者分离关注点,提高代码的可维护性和可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MVC 模式

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

  • Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。
  • View(视图) - 视图代表模型包含的数据的可视化。
  • Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。

实现

我们将创建一个作为模型的 Student 对象。StudentView 是一个把学生详细信息输出到控制台的视图类,StudentController 是负责存储数据到 Student 对象中的控制器类,并相应地更新视图 StudentView

MVCPatternDemo,我们的演示类使用 StudentController 来演示 MVC 模式的用法。

MVC 模式的 UML 图

 

 示例代码:

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;
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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值