设计模式之mvc

MVC框架

MVC 就是全名是Model View Controller ,是模型(Model)-视图(View)-控制器(Controller)的缩写。一种软件设计的典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。

简洁

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
Model(模型)表示应用程序核心(比如数据库记录列表)。
View(视图)显示数据(数据库记录)
Controller(控制器)处理输入(写入数据库记录)

MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。


MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
  

下面是C++实现单线程下的MVC

#include<iostream>
#include<string>
#include<map>
#include<vector>
#include<iterator>
using namespace std;

class Listener
{
public:
    Listener(string name):_name(name){}
    virtual void handleMessage(int msgid)=0;
public:
    string _name;
};

class Listener1 :public Listener
{
public:
    Listener1(string name):Listener(name){}
    void handleMessage(int msgid)
    {
        cout<<_name<<" ";
        switch(msgid)
        {
        case 0:
            cout<<"hand 0 msg!"<<endl;
            break;
        case 1:
            cout<<"hand 1 msg!"<<endl;
            break;
        default:
            cout<<"recv invalid msg!"<<endl;
            break;
        }
    }
};

class Listener2 :public Listener
{
public:
    Listener2(string name):Listener(name){}
    void handleMessage(int msgid)
    {
        cout<<_name<<" ";
        switch(msgid)
        {
        case 0:
            cout<<"hand 0 msg!"<<endl;
            break;
        case 2:
            cout<<"hand 2 msg!"<<endl;
            break;
        default:
            cout<<"recv invalid msg!"<<endl;
            break;
        }
    }
};

class Listener3 :public Listener
{
public:
    Listener3(string name):Listener(name){}
    void handleMessage(int msgid)
    {
        cout<<_name<<" ";
        switch(msgid)
        {
        case 1:
            cout<<"hand 1 msg!"<<endl;
            break;
        case 3:
            cout<<"hand 3 msg!"<<endl;
            break;
        default:
            cout<<"recv invalid msg!"<<endl;
            break;
        }
    }
};

class Observer
{
public:
    void registerMsg(Listener *plistener,int msgid)
    {
        map<int,vector<Listener*>>::iterator it=_obserMap.find(msgid);
        if(it==_obserMap.end())
        {
            vector<Listener*> vec;
            vec.push_back(plistener);
            _obserMap.insert(make_pair(msgid,vec));
        }
        else
        {
            it->second.push_back(plistener);
        }
    }
    void dispatchMsg(int msgid)
    {
        map<int,vector<Listener*>>::iterator it=_obserMap.find(msgid);
        if(it!=_obserMap.end())
        {
            vector<Listener*>::iterator vit =it->second.begin();
            for(;vit!=it->second.end();++vit)
            {
                (*vit)->handleMessage(msgid);
            }
        }
    }
private:
    map<int,vector<Listener*>> _obserMap;
};
int main()
{
    Listener *p1=new Listener1("Listener1");
    Listener *p2=new Listener2("Listener2");
    Listener *p3=new Listener3("Listener3");

    Observer obser;
    obser.registerMsg(p1,0);
    obser.registerMsg(p1,1);
    obser.registerMsg(p2,0);
    obser.registerMsg(p2,2);
    obser.registerMsg(p3,1);
    obser.registerMsg(p3,3);

    int msgid=0;
    while(true)
    {
        cout<<"msgid:";
        cin>>msgid;
        obser.dispatchMsg(msgid);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值