设计模式二: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;
}

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

原文地址:https://www.cnblogs.com/mryrs/p/6814879.html