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

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

  • 相关阅读:
    Excel VB Script
    Excel Text Converter as C# Format
    快捷键
    如何使用 MasterPage
    Excel 오른쪽버튼 윗주
    Oracle Hints
    ASP.NET 弹出窗口
    Log4Net
    word 修改 表宽度
    While 나가는 법
  • 原文地址:https://www.cnblogs.com/mryrs/p/6814879.html
Copyright © 2020-2023  润新知