C++多重继承 实现解耦,mvc分离

以前刚开始学习C++时候,觉得多重继承完全没有必要。伤脑筋,处理不好。最后1个类会继承N多父亲类处理。

晚上看django资料时候。发现django的cbv(class base view)是使用多重集成的。

分为mixin与view部分。

子类化view时候,通过继承自定义的mixin来处理参数过滤。瞬间想到这其实是一种插件机制。也可以说实现了mvc的部分分离。

网上找了一下C++的多重继承资料,基本都在讲多重继承的语法。


用C++来实现下。

逻辑处理部分logic.h中

//
//  Logic.h
//  MultipleInheritance
//
//  Created by  王 岩 on 13-8-23.
//  Copyright (c) 2013年  王 岩. All rights reserved.
//

#ifndef MultipleInheritance_Logic_h
#define MultipleInheritance_Logic_h

class Mixin {
protected:
    int     m_data;
    
public:
    virtual void setParam()
    {
        m_data = 10;
    }
    
    virtual int getParam()
    {
        return m_data;
    }
};

#endif


controler部分在 render.h中。代码
//
//  Render.h
//  MultipleInheritance
//
//  Created by  王 岩 on 13-8-23.
//  Copyright (c) 2013年  王 岩. All rights reserved.
//

#ifndef MultipleInheritance_Render_h
#define MultipleInheritance_Render_h

#include "views.h"
#include <string>

class Render {
    
public:
    static void RenderView( std::string templateName, int data )
    {
        std::cout
        << "i come from view: " << templateName
        << "\ni come from data: "<< data
        << std::endl;
    }
};

#endif

视图部分在view.h中,代码

//
//  views.h
//  MultipleInheritance
//
//  Created by  王 岩 on 13-8-23.
//  Copyright (c) 2013年  王 岩. All rights reserved.
//

#ifndef MultipleInheritance_views_h
#define MultipleInheritance_views_h

#include "Logic.h"
#include "Render.h"
#include <iostream>
#include <string>

class View {
protected:
    std::string     m_template;
    
public:
    virtual void Render() = 0;
    virtual std::string getTemplateName()   { return this->m_template; }
    virtual void setTemplateName(std::string sName) { this->m_template = sName; }
    void    as_View()  { this->Render(); }
};


class getView : virtual public Mixin , virtual public View {
    
    void   Render()
    {
        this->setParam();
        
        //这里修改为多各种参数
        //参数1,html模版
        //后续参数为字典
        Render::RenderView( this->getTemplateName() , this->m_data);
    }
};

#endif

子类化实现在 main.cpp中代码

//
//  main.cpp
//  MultipleInheritance
//
//  Created by  王 岩 on 13-8-23.
//  Copyright (c) 2013年  王 岩. All rights reserved.
//

#include <iostream>
#include "views.h"

class subMixin : virtual public Mixin
{
public:
    void setParam()
    {
        m_data = 100;
    }
};

class subGetView :   virtual public subMixin , virtual public getView
{
    
public:
    subGetView()
    {
        this->setTemplateName( "hello.world" );
    }
};

int main(int argc, const char * argv[])
{

    // insert code here...
    subGetView *sView = new subGetView();
    sView->as_View();
    return 0;
}

运行结果:

i come from view: hello.world
i come from data: 100



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值