桥接模式(bridge)

一、        作用

指的是把一件事的抽象和行为分开来。抽象可以简单地理解为属性,即把对象的属性和行为分开,降低耦合,这样便于扩展。

二、        模型图

 

 桥接模式(bridge) - 长空飞雪 - 我的菜鸟日记

三、        参与者

abstraction:一个抽象类,维护一个指向implementor的指针。

RefinedAbstraction:一个具体的对象。

implementor:一个抽象类,定义行为的接口。

ConcreteImplementor:具体实现行为的接口。

四、        操作流程

实例化一个具体的行为类,将它传给操作它的对象即RefinedAbstraction对象,由它来调用具体操作函数,实现预期的效果。

五、        比较

无。

六、        C++实现

人可以穿西装,牛仔,工装。

当然你也可以搞复杂点,在穿衣服上加上性别判断。

以下是C++代码实现:

 

#include <iostream>

using namespace std;

 

class WEAR

{

public:

    virtual void WearClothing(void) = 0;

};

 

class person

{

public:

    person(WEAR *pwear):m_pwear(pwear){}

    void WearAction(void)

    {

        m_pwear->WearClothing();

    }

 

private:

    WEAR *m_pwear;

};

 

class WearSuit:public WEAR

{

public:

    void WearClothing(void)

    {

        cout<<"I wear suit!"<<endl;

    }

};

 

class WearJeans:public WEAR

{

public:

    void WearClothing(void)

    {

        cout<<"I wear jeans!"<<endl;

    }

};

 

class WearFrock:public WEAR

{

public:

    void WearClothing(void)

    {

        cout<<"I wear frock!"<<endl;

    }

};

 

class Woman:public person

{

public:

    Woman(WEAR *pwear):person(pwear){}

};

 

class Man:public person

{

public:

    Man(WEAR *pwear):person(pwear){}

};

 

int main(int argc, char **argv)

{

    WEAR *psuit  = new WearSuit;

    WEAR *pjeans = new WearJeans;

    WEAR *pfrock = new WearFrock;

    //穿西装的妇女

    person *woman1 = new Woman(psuit);

    woman1->WearAction();

    //穿牛仔的妇女

    person *woman2 = new Woman(pjeans);

    woman2->WearAction();

    //穿工装的妇女

    person *woman3 = new Woman(pfrock);

    woman3->WearAction();

    //穿西装的男人

    person *man1 = new Man(psuit);

    man1->WearAction();

    //穿牛仔的男人

    person *man2 = new Man(pjeans);

    man2->WearAction();

    //穿工装的男人

    person *man3 = new Man(pfrock);

    man3->WearAction();

 

    delete psuit;

    delete pjeans;

    delete pfrock;

    delete woman1;

    delete woman2;

    delete woman3;

    delete man1;

    delete man2;

    delete man3;

 

    return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值