C++ 设计模式:MVC模式

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

 

  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: C++ Qt设计模式是一种在Qt框架下使用的面向对象编程方法,它能帮助开发者构建可复用、可扩展的高质量代码。设计模式是一套被广泛接受的问题解决方案,它们是由经验丰富的开发者总结出来并被广泛应用于软件开发领域。 Qt框架本身提供了一些常用的设计模式,如信号与槽机制、观察者模式等,方便开发者在应用开发过程中使用这些已经封装好的设计模式来简化代码编写。此外,Qt还提供了一些特定的设计模式,如Model-View-Controller(MVC模式、Model-View-Delegate(MVD)模式等,这些模式能够帮助开发者更好地处理数据与界面的分离和交互。 Qt设计模式中的书签(Bookmarks)是一种用于标记代码中感兴趣的位置的方法。通过使用书签,开发者可以快速定位到代码中重要的地方,方便调试和代码的阅读与理解。书签可以添加、删除、移动等操作,可以在代码编辑器中通过快捷键或菜单选项进行管理。 通过使用Qt设计模式和书签,开发者能够更加高效地开发和维护代码。这些设计模式提供了一种标准化的解决方案,遵循这些设计模式能够使代码更加清晰、易读、易于扩展和维护。而书签提供的快速导航功能能够提高开发效率,帮助开发者在庞大的代码中快速定位到关注的位置。 总结来说,C++ Qt设计模式是一种用于构建可复用、可扩展的高质量代码的方法。书签是其中的一种标记工具,用于快速定位关注的代码位置,提高开发效率。 ### 回答2: Qt设计模式是指在Qt开发中,为了解决特定的问题,采用的一种经过验证的设计方案。 其中,带书签是一种常见的Qt设计模式。在Qt中,我们常常需要处理大量的数据或者对象,并且需要在它们之间进行跳转或者查找。此时,使用带书签的设计模式可以提高代码的可读性和维护性。 带书签模式的核心思想是:在需要跳转或者查找的位置,用一个标记(也就是书签)来标识。这个标记就像实体书中的书签一样,可以把书签放在需要的位置,然后可以通过书签来快速定位到需要的位置,而不需要一直从头开始翻页。 在Qt中,可以使用QComboBox或者QListWidget来实现带书签的功能。假设我们有一个包含多个页面的界面,每个页面对应一个Widget或者Dialog。我们可以使用QComboBox或者QListWidget来显示所有页面的名称,并在点击某个名称时,跳转到对应的页面。 另外,我们还可以使用QSignalMapper来实现带书签的功能。QSignalMapper可以将多个信号映射到一个槽函数中,并在槽函数中根据不同的信号执行不同的操作。我们可以把每个页面对应的信号连接到QSignalMapper的map()函数上,然后在槽函数中根据信号的参数实现跳转或者查找的功能。 总结起来,Qt设计模式中的带书签模式可以帮助我们处理大量的数据或者对象,提高代码的可读性和维护性。在实现过程中,可以使用QComboBox、QListWidget或者QSignalMapper等类来实现带书签的功能。 ### 回答3: Qt设计模式是一种在Qt框架下开发应用程序的方法论,它以一种可复用的方式解决了常见的软件设计问题。Qt设计模式通过提供一系列的类和接口,帮助开发者编写结构清晰、可扩展和可维护的代码。 Qt设计模式中最常用的模式之一是MVC(Model-View-Controller)模式。在这个模式中,应用程序被分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。模型部分负责存储和管理应用程序的数据,视图部分负责展示数据并与用户交互,控制器部分负责管理模型和视图之间的通信。 另一个常用的设计模式是观察者模式。在Qt中,观察者模式通过Qt的信号和槽机制实现。通过信号和槽的连接,当一个对象的状态发生改变时,所有观察者都会收到通知并做出相应的响应。这种方式非常适合处理用户界面和后台数据之间的交互。 另外,Qt还提供了许多其他的设计模式,如单例模式、工厂模式、策略模式等等。这些设计模式可以根据具体的应用场景来选择和使用,以提高代码的可读性、可维护性和可扩展性。 总之,Qt设计模式提供了一套有效的解决方案,帮助开发者在Qt框架下开发应用程序。无论是初学者还是经验丰富的开发者,都可以从中受益。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值