框架设计MVP

重点:

1.presenter里面包含view和model

2.和MVP不同的是View和Model之间不进行交互

3.view包含presenter,view通过presenter反向处理逻辑。

链接:

MVP简单实现_安卓mvp presenter-CSDN博客

Model.h

#pragma once
//Model数据处理器
class Model
{
public:
	void Increace()
	{
		count++;
	}
	void Decreace()
	{
		count--;
	}
	int GetCount()
	{
		return count;
	}
	void SetCount(int num)
	{
		count = num;
	}
private:
	int count{ 10 };
};

View.h

#pragma once


using namespace std;
//view显示器
class CounterPresenter;
class View
{
public:
	void Update(int data)
	{
		cout << data << endl;
	}
	void SetPresenter(weak_ptr<CounterPresenter> pre)
	{
		m_presenter = pre;
	}
	void IncreaceView();
	
	void DecreaceView();
private:
	weak_ptr<CounterPresenter> m_presenter;
};

view.cpp

#include "CView.h"
#include "CCounterPresenter.h"
//view显示器
void View::IncreaceView()
{
	if (std::shared_ptr<CounterPresenter> locked = m_presenter.lock())
	{
		locked->HandleIncrementPressed();
	}
}
void View::DecreaceView()
{
	if (std::shared_ptr<CounterPresenter> locked = m_presenter.lock())
	{
		locked->HandleDecrementPressed();
	}
}

CounterPresenter.h

#pragma once

#include "CModel.h"
#include "CView.h"
using namespace std;
//Controller控制器
class CounterPresenter
{
public:
	CounterPresenter(shared_ptr<Model> model, shared_ptr<View> view) :m_model(model), m_view(view)
	{
	}

	void HandleIncrementPressed()
	{
		m_model->Increace();
		m_view->Update(m_model->GetCount());
	}
	void HandleDecrementPressed()
	{
		m_model->Decreace();
		m_view->Update(m_model->GetCount());
	}
private:
	shared_ptr<Model> m_model;
	shared_ptr<View> m_view;
};

test.cpp

// Test.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
#include "CModel.h"
#include "CView.h"
#include "CCounterPresenter.h"

using namespace std;


int main()
{
	shared_ptr<Model> model= make_shared<Model>();
	shared_ptr<View> view = make_shared<View>();
	shared_ptr<CounterPresenter> cont = make_shared<CounterPresenter>(model, view);

	view->SetPresenter(cont);

	view->IncreaceView();
	view->DecreaceView();
	return 0;

}

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 00:02:05       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 00:02:05       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 00:02:05       62 阅读
  4. Python语言-面向对象

    2024-07-17 00:02:05       72 阅读

热门阅读

  1. 坚持日更的意义何在?

    2024-07-17 00:02:05       19 阅读
  2. Android系统中Launcher应用是被谁启动的

    2024-07-17 00:02:05       21 阅读
  3. 智能家居的四种无线技术

    2024-07-17 00:02:05       24 阅读
  4. 定时任务类:使用@Scheduled注解设计定时任务

    2024-07-17 00:02:05       19 阅读
  5. python 语法学习 day 7

    2024-07-17 00:02:05       28 阅读
  6. 搜维尔科技:Varjo XR-4开箱测评,里面都有啥?

    2024-07-17 00:02:05       18 阅读