设计模式--MVC(C++版)
MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
- Model(模型)-是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
- View(视图) -是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
- Controller(控制器) - 是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
#pragma once class Hero
{
public:
Hero();
~Hero();
//be attacked
void beAttack(int att);
//is dead?
bool dead() { return m_nHp == ; }
public:
//set no
void setNo(std::string no) { m_sNo = no; }
//get no
std::string getNo() { return m_sNo; } //set name
void setName(std::string name) { m_sName = name; }
//get name
std::string getName() { return m_sName; } //get hp
void setHp(int hp) { m_nHp = hp; }
//set hp
int getHp() { return m_nHp; } //set att
void setAtt(int att) { m_nAtt = att; }
//get att
int getAtt() { return m_nAtt; }
private: std::string m_sName;//姓名
std::string m_sNo;//游戏场号码 int m_nHp;//血量
int m_nAtt;//攻击力
};
Hero.h
#include "stdafx.h"
#include "Hero.h" //ctor
Hero::Hero()
{
} //Destructor
Hero::~Hero()
{ } void Hero::beAttack(int att)
{
if (att <= ) throw "Att Number <= 0";//safe check
m_nHp -= att;
m_nHp = m_nHp < ? : m_nHp;//safe check
}
Hero.cpp
HeroView类:
#pragma once
class HeroView
{
public:
HeroView();
~HeroView(); //show hero UI data;
void show(string no, string name,int att, int hp);
//show hero dead UI;
void dead(string no, string name);
//show heor winned UI;
void winned(string no, string name);
private:
//Hero* m_hero;
};
HeroView.h
#include "stdafx.h"
#include "HeroView.h" HeroView::HeroView()
{
} HeroView::~HeroView()
{
} void HeroView::show(string no,string name, int att, int hp)
{
cout << "Hero info:"<<"(no:"<<no<<",name:"<<name<<",att:"<<att<<",hp:"<<hp<<")" << endl;
} void HeroView::dead(string no, string name)
{
cout << "Hero Dead:" << "(no:" << no << ",name:"<<name << ")" << endl;
} void HeroView::winned(string no, string name)
{
cout << "Hero Winned:" << "(no:" << no << ",name:" << name << ")" << endl; }
HeroView.cpp
HeroController类:
#pragma once
class HeroController
{
public:
HeroController(string no, string name);
~HeroController();
void setHeroHp(int hp);//set hero hp
void setHeroAtt(int att);//set hero att
void show();//show hero info
void beAttack(int att);//be attacked by hero
void dead();//dead
void winned();//winned
public :
Hero* getHero() { return m_hero; }//get hero private:
Hero * m_hero;//hero
HeroView * m_heroView;//hero view
};
HeroController.h
#include "stdafx.h"
#include "HeroController.h" HeroController::HeroController(string no, string name)
{
m_heroView = new HeroView();
m_hero = new Hero();
m_hero->setNo(no);
m_hero->setName(name);
} HeroController::~HeroController()
{
} void HeroController::setHeroHp(int hp)
{
m_hero->setHp(hp);
} void HeroController::setHeroAtt(int att)
{
m_hero->setAtt(att);
} void HeroController::show()
{
m_heroView->show(m_hero->getNo(), m_hero->getName(),m_hero->getAtt(), m_hero->getHp());
} void HeroController::beAttack(int att)
{
m_hero->beAttack(att);
} void HeroController::dead()
{
m_heroView->dead(m_hero->getNo(),m_hero->getName());
} void HeroController::winned()
{
m_heroView->winned(m_hero->getNo(), m_hero->getName());
}
HeroController.cpp
main() 测试:
// ConsoleApplication_C++1.cpp: 主项目文件。 #include "stdafx.h" using namespace System; int main()
{
//初始化一个英雄的控制器
HeroController* controller = new HeroController("","孟栋");
//设置血量100
controller->setHeroHp();
controller->setHeroAtt();
//显示一下血量
controller->show(); //初始化第二个英雄的控制器
HeroController* controller2 = new HeroController("", "黑魔王");
//设置血量100
controller2->setHeroHp();
//设置攻击力20
controller2->setHeroAtt();
//显示一下血量
controller2->show(); //hero1 attack hero2
controller2->beAttack(controller->getHero()->getAtt());
//ui更新
controller2->show(); //如果没有dead,就一直攻击
while (!controller2->getHero()->dead())
{
//hero1 attack hero2
controller2->beAttack(controller->getHero()->getAtt());
//ui更新
controller2->show();
} controller2->dead();
controller->show();
controller->winned(); return ;
}
main
Hero info : (no:, name : 孟栋, att : , hp : )
Hero info : (no : , name : 黑魔王, att : , hp : )
Hero info : (no : , name : 黑魔王, att : , hp : )
Hero info : (no : , name : 黑魔王, att : , hp : )
Hero info : (no : , name : 黑魔王, att : , hp : )
Hero info : (no : , name : 黑魔王, att : , hp : )
Hero info : (no : , name : 黑魔王, att : , hp : )
Hero Dead : (no : , name : 黑魔王)
Hero info : (no : , name : 孟栋, att : , hp : )
Hero Winned : (no : , name : 孟栋)
多加点评,谢谢!
设计模式--MVC(C++版)的更多相关文章
- python设计模式第2版
python设计模式第2版 目录 第1章 设计模式简介 1 1.1 理解面向对象编程 1 1.1.1 对象 2 1.1.2 类 2 1.1.3 方法 2 1.2 面向对象编程的主要概念 3 1.2.1 ...
- 【Head-First设计模式】C#版-学习笔记-开篇及文章目录
原文地址:[Head-First设计模式]C#版-学习笔记-开篇及文章目录 最近一年断断续续的在看技术书,但是回想看的内容,就忘了书上讲的是什么东西了,为了记住那些看过的东西,最好的办法就是敲代码验证 ...
- spring mvc注解版01
spring mvc是基于servlet实现的在spring mvc xml版中已经说过了,注解版相较于xml版更加简洁灵活. web项目的jar包: commons-logging-1.1.3.ja ...
- 【Python】《大话设计模式》Python版代码实现
<大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼 ...
- MySQL数据库(4)- 多表查询、可视化工具Navicat的使用、设计模式MVC
一.多表查询 准备工作:创建两张表,部门表(department).员工表(employee),代码和表格如下: # 创建表 create table department( id int, name ...
- Dot Net设计模式—MVC模式
1 MVC设计模式简介 MVC结构是为那些需要为同样的数据提供多个视图的应用程序而设计的,它很好的实现了数据层与表示层的分离.MVC作为一种开发模型,通常用于分布式应用系统的设计和分析中,以及用于确定 ...
- iOS设计模式——MVC(Model-View-Controller)
Modol View Controller(MVC)是一种最早的也是最成功的可重用的设计模式,70年代的时候首次在smaltalk编写的程序中成功使用.基于MVC设计 模式,Cocoa整体架构可以划分 ...
- 《大话设计模式》Python版代码实现
上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼界.<大话设计模式>的代码使用C#写成的 ...
- 《大话设计模式》ruby版代码:简单工厂模式
之前有看过<ruby设计模式>,不过渐渐的都忘记了.现在买了一个大话设计模式,看起来不是那么枯燥,顺便将代码用ruby实现了一下. # -*- encoding: utf-8 -*- #运 ...
随机推荐
- 连接池 DBCP c3p0以及分页的案例
1. 连接池 思考: 程序中连接如何管理? 连接资源宝贵:需要对连接管理 连接: a) 操作数据库,创建连接 b) 操作结束, 关闭! 分析: 涉及频繁的连接的打开.关闭,影响程序的运行效率! 连接 ...
- ArcGIS API For JavaScript 加载地图,设置地图中心点
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 关于Tarjan(1)
众所周知, 求有向图的强连通分量的Tarjan算法是以其发明者Robert Tarjan命名的.Robert Tarjan还发明了求双连通分量的Tarjan算法,以及求最近公共祖先(LCA)的离线Ta ...
- php多进程编程详解
php多进程编程 前言 php单进程存在的问题: 多核处理器未充分利用,而单处理器通常需要等待其他操作完成之后才能再继续工作. 任何现代操作系统都可在幕后执行多任务,这意味着在很短时间内,计算机可以调 ...
- 【子非鱼】归并排序过程呈现之java内置GUI表示
在网上看到一个视频将各种排序用视频表示出来,配上音乐,挺好玩的样子,就算是不会编程的人看到也会觉得很舒服,碰巧我也正在写归并算法,于是就用java的GUI实现一个. 归并排序的时间复杂度是T(n)=O ...
- winow7安装django 1.9.1
1.下载django https://www.djangoproject.com/download/ 2.解压,并到该目录下 执行 python setup.py install 3.验证是否安装成功 ...
- git pull错误记录及解决
执行操作:$ git pull 返回错误: error: RPC failed; result=7, HTTP code = 0 fatal: The remote and hung up unexp ...
- Linux下Scala(2.12.1)安装
一.文件准备 1.1 文件名称 scala-2.12.1.tgz 1.2 下载地址 http://www.scala-lang.org/download/2.12.1.html 二.工具准备 2.1 ...
- Java EE基础之JSP
从本篇文章开始,我会用文章记录下我在学习Java EE过程中的一些笔记和感悟,至于还没有更新结束的Java SE还是会继续写的,只是我觉得一直写语法很枯燥,自己也没法继续下去,所以带着点web学习,会 ...
- java设计模式之职责链模式
责任链模式 设计模式很多时候都是看见名字都知道意思,责任链,见名知义为请求创建一系列处理对象. 此模式基于请求的类型将请求的发送方和接收方分离.通常每个接收器包含对另一个接收器的引用.如果一个对象不能 ...