设计模式二:MVC

先附上部分代码:

/*
*MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。
*Model(模型) - 模型代表一个存取数据的对象,它也可以带有逻辑,在数据变化时更新控制器。
*View(视图) - 视图代表模型包含的数据的可视化。
*Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。
*/
#include "stdafx.h"
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class View;
class Model;

class Controller
{
public:
    Controller(Model* model,View* view)
    {
        this->model=model;
        this->view=view;
    }
    virtual string get_model_msg()=0;

    virtual void set_model_msg(string msg)=0;

    virtual void update()=0;

protected:
    Model* model;
    View* view;
};
class Model
{
public:
    virtual string  getmsg()=0;
    virtual void setmsg(string msg)=0;
protected:
    string msg;
};
class Msg:public Model
{
public:
    string getmsg()
    {
        return msg;
    }
    void setmsg(string msg)
    {
        this->msg=msg;
    }

};
class View
{
public:
    void show_msg(Controller* co)
    {
        cout<<co->get_model_msg()<<endl;
    }
};
class Manager:public Controller
{
public:
    Manager(Model* model,View* view):Controller(model,view){}
    string get_model_msg()
     {
         return model->getmsg();
     }

     void set_model_msg(string msg)
     {
         model->setmsg(msg);
     }

     void update()
     {
         view->show_msg(this);
     }

};

解释一下,不用按照我这种声明抽象类的方法,我只是单纯的为了使用纯虚函数(因为之前的文章说了纯虚函数,采纳SoftwareTeacher给我提的建议,这次用一下。),顺便补充一下纯虚函数的一些注意事项:

纯虚函数声明时的返回值和参数 在子类实现的时候是不能改变的,否则认为没有实现这个纯虚函数,也就是说 实现纯虚函数: 参数,返回值必须保持一致。

我也是初学MVC 说下我的理解:

Model和View受Controller的控制,且每层相互独立,层之间不必关心每层到底是怎样实现的;比如说:开发View的时候你仅仅需要考虑的是如何布局好一个界面,开发Model的时候仅仅要考虑业务逻辑和数据维护,能使开发者专注于某一方面的开发。

附上主函数:

int _tmain(int argc, _TCHAR* argv[])
{
    char opt;
    Msg* msger=new Msg;
    View* view=new View;
    Manager manager(msger,view);
     while(true)
     {
        string tempmsg;
        cout<<"please input a number"<<endl;
        cin>>opt;
        switch(opt)
      {
        case ‘1‘:
            cout<<"please input the change msg"<<endl;
            cin>>tempmsg;
            manager.set_model_msg(tempmsg); // 通过Controller来改变Model
            break;
        case ‘2‘:
            manager.update(); //通过Controller来显示View
            break;
         default:
              exit(0);
            break;
      }
    }
    return 0;
}

如果有说错的地方欢迎批评指正

时间: 2024-05-24 02:46:06

设计模式二:MVC的相关文章

Android 设计模式之MVC模式

说到Android设计模式的MVC模式,估计很多人都是比较熟悉了,这里深入了解一下MVC到底是怎么回事,以ListView为例子讲解. 一.深入理解MVC概念 MVC即Model-View-Controller.M:逻辑模型,V:视图模型,C:控制器. MVC模式下,系统框架的类库被划分为3种:模型(Model).视图(View).控制器(Controller).模型对象负责建立数据结构和相应的行为操作处理.视图对象负责在屏幕上渲染出相应的图形信息展示给用户看.控制器对象负责截获用户的按键和屏幕

iOS开发与设计模式 - MVC

iOS开发与设计模式 - MVC 最近在学习GoF的设计模式这本书,粗略的浏览了一遍,真是好书.好书就应该好好读,因此很有必要从实际的言语.项目理解设计模式. 我是做iOS开发的,自然就从这方面入手(脑). MVC iOS开发最基本的一个模式就是MVC, M指model,V指view,C指controller,有很多文章对它们是什么,它们的关系,它们如何交互进行了详细的说明,本文就不再展开说明了,仅放一张图供大家参考(来自斯坦福大学ios课程)  ViewController 是什么? 在iOS

iOS开发设计模式之MVC

本片文章介绍MVC设计模式及其在iOS开发中的使用技巧 什么是MVC设计模式 MVC是设计模式的起源,也是在软件工程领域使用最多的一种设计模式. MVC即:Model模型.View视图.Controller控制器 模型: 在模型对象中封装数据并定义操作数据的特定逻辑行为 模型可以表示复杂的数据结构,可以是屏幕上显示的数据.等待处理的数据等 视图: 使用视图对象向用户展示信息 视图对象可以响应用户的操作,并懂得如何将自己展现在屏幕上 视图对象通常从应用程序的模型对象中获取数据用以展示. 可以跟一个

设计模式:二

php面向对象设计模式中,工厂模式,从字面中就可以以理解为,工厂模式就是在不改变原来代码的结构的基础上,根据需求的增加类定义去完成 <?php header("Content-Type:text/html; charset=utf8"); /** * php设计模式 * 二:工厂模式 * */ // 定义接口DB类 interface DB{ function conn(); } class dbmysql implements DB{ public function conn(

Gof 设计模式 、MVC 编程模式

主题: Gof 设计模式 .MVC 设计模式 名词解释: OOP  (面向对象程序设计) 接口 抽象类 Refactoring(重构方法) GoF(Gang of Four),中文名——四人组.GoF是一种设计模式. via http://baike.so.com/doc/176639.html Model–view–controller (MVC) via http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller 有力

设计模式 ( 二十一 ):Vistor访问者模式 -- 行为型

1.概述 在软件开发过程中,对于系统中的某些对象,它们存储在同一个集合collection中,且具有不同的类型,而且对于该集合中的对象,可以接受一类称为访问者的对象来访问,而且不同的访问者其访问方式有所不同. 例子1:顾客在超市中将选择的商品,如苹果.图书等放在购物车中,然后到收银员处付款.在购物过程中,顾客需要对这些商品进行访问,以便确认这些商品的质量,之后收银员计算价格时也需要访问购物车内顾客所选择的商品. 此时,购物车作为一个ObjectStructure(对象结构)用于存储各种类型的商品

设计模式 ( 二十 ): Template method模板方法模式 -- 行为型

  1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序.但是某些步骤的具体实现是未知的,或者说某些步骤的实现与具体的环境相关.例子1:银行业务办理流程在银行办理业务时,一般都包含几个基本固定步骤:取号排队->办理具体业务->对银行工作人员进行评分.取号取号排队和对银行工作人员进行评分业务逻辑是一样的.但是办理具体业务是个不相同的,具体业务可能取款.存款或者转账. 2.问题 如何保证架构逻辑的正常执行,而不被子类破坏 ? 3.

介绍MFC框架中涉及到的设计模式(二)

接着上一篇<介绍MFC框架中涉及到的设计模式(一)>介绍 单例模式(Singleton Pattern) 单例模式是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例类的特殊类.通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案. 单例模式的要点有三个: 1.某个类只能有一个实例: 2.它必须自行创建这个实例: 3.它必须自行向整个系统提供这个实例. 单例模式典

天天设计模式二:创建型模式实践

天天设计模式二:创建型模式实践 创建型设计模式主要应用在对象创建,以不同的方式来满足系统的灵活性配置.动态注入.等应用场景. 一.单例模式 二.抽象工厂 三.建造者模式 四.工厂方法模式 五.原型模式

C#中的异步调用及异步设计模式(二)——基于 IAsyncResult 的异步设计模式

三.基于 IAsyncResult 的异步设计模式(设计层面) IAsyncResult 异步设计模式通过名为 BeginOperationName 和 EndOperationName 的两个方法来实现原同步方法的异步调用,如 FileStream 类提供了 BeginRead 和 EndRead 方法来从文件异步读取字节,它们是 Read 方法的异步版本 Begin 方法包含同步方法签名中的任何参数,此外还包含另外两个参数:一个AsyncCallback 委托和一个用户定义的状态对象.委托用