当前位置: 首页 > news >正文

框架设计MVP

重点:

1.presenter里面包含view和model

2.和MVC不同的是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 onceusing 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;}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Adobe国际认证详解-网页设计认证专家行业应用场景解析
  • 数据仓库中事实表设计的关键步骤解析
  • 【Langchain大语言模型开发教程】模型、提示和解析
  • 微服务实战系列之玩转Docker(一)
  • # Redis 入门到精通(七)-- redis 删除策略
  • [SUCTF 2019]EasySQL1
  • 【C语言ffmpeg】打开第一个视频
  • Linux的热插拔UDEV机制和守护进程
  • ubuntu上通过修改grub启动参数,将串口重定向到sol
  • SQLite 事务
  • 实时吸烟检测系统:基于深度学习与YOLO模型的完整实现
  • Linux--多线程
  • Langchain[3]:Langchain架构演进与功能扩展:流式事件处理、事件过滤机制、回调传播策略及装饰器应用
  • Python爬虫实战:地震数据的自动化抓取与分析
  • Java--Collection集合
  • Codepen 每日精选(2018-3-25)
  • Git同步原始仓库到Fork仓库中
  • nfs客户端进程变D,延伸linux的lock
  • Vue UI框架库开发介绍
  • 创建一个Struts2项目maven 方式
  • 从零开始学习部署
  • 开发基于以太坊智能合约的DApp
  • 力扣(LeetCode)357
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 区块链技术特点之去中心化特性
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 入口文件开始,分析Vue源码实现
  • 入手阿里云新服务器的部署NODE
  • 微信小程序实战练习(仿五洲到家微信版)
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 消息队列系列二(IOT中消息队列的应用)
  • 学习使用ExpressJS 4.0中的新Router
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 怎么把视频里的音乐提取出来
  • 最简单的无缝轮播
  • 我们雇佣了一只大猴子...
  • ​学习一下,什么是预包装食品?​
  • # 数论-逆元
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #VERDI# 关于如何查看FSM状态机的方法
  • #微信小程序:微信小程序常见的配置传旨
  • (19)夹钳(用于送货)
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (补充)IDEA项目结构
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .htaccess配置常用技巧
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?
  • 。。。。。
  • :如何用SQL脚本保存存储过程返回的结果集
  • @ConfigurationProperties注解对数据的自动封装