1. 程式人生 > >設計模式二:MVC

設計模式二:MVC

模式 color div oid char sge 顯示 mod main

先附上部分代碼:

/*
*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;
}

如果有說錯的地方歡迎批評指正

設計模式二:MVC