設計模式二:MVC
阿新 • • 發佈:2017-05-05
模式 color div oid char sge 顯示 mod main
先附上部分代碼:
/* *MVC 模式代表 Model-View-Controller(模型-視圖-控制器) 模式。這種模式用於應用程序的分層開發。 *Model(模型) - 模型代表一個存取數據的對象,它也可以帶有邏輯,在數據變化時更新控制器。 *View(視圖) - 視圖代表模型包含的數據的可視化。 *Controller(控制器) - 控制器作用於模型和視圖上。它控制數據流向模型對象,並在數據變化時更新視圖。它使視圖與模型分離開。 */ #include "stdafx.h" #include<iostream> #include<string> #include<vector> usingnamespace 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