c++设计模式之桥接模式

1.什么是桥接模式?
桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。
这种模式涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类。这两种类型的类可被结构化改变而互不影响。
2.应用
意图:将抽象部分与实现部分分离,使它们都可以独立的变化。
主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。
何时使用:实现系统可能有多个角度分类,每一种角度都可能变化。
如何解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。
关键代码:抽象类依赖实现类。
应用实例:手机品牌有多种,手机软件也有多种,如何把2者有机的联合起来。
优点: 1、抽象和实现的分离。 2、优秀的扩展能力。 3、实现细节对客户透明。
缺点:桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。
使用场景: 1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。 2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。 3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。
注意事项:对于两个独立变化的维度,使用桥接模式再适合不过了。
3.实例
以手机软件和手机品牌的例子进行说明,2者都是独立变化的,其中手机软件已手机品牌作为载体体现。

#include <iostream>
using namespace std;
class Phone_type
{
public:
    virtual void operate() = 0;
};

class Phone_soft
{
public:
    virtual void soft() = 0;
};

class Phone_typeA:public Phone_type
{
private:
    Phone_soft * ptr;
public:
    Phone_typeA(Phone_soft* p_sft){
        this->ptr = p_sft;
    }
    void operate(){
        cout << "Phone_typeA:operate-----"<<endl;
        this->ptr->soft();
    }
};

class Phone_typeB:public Phone_type
{
private:
    Phone_soft* ptr;
public:
    Phone_typeB(Phone_soft* p_sft){
        this->ptr = p_sft;
    }
    void operate(){
        cout << "Phone_typeB:operate-----"<<endl;
        this->ptr->soft();
    }
};

class Phone_soft_game:public Phone_soft
{
public:
    void soft(){
        cout<<"this is soft_game!"<<endl;
    }
};

class Phone_soft_contact:public Phone_soft
{
    void soft(){
        cout<<"this is soft_contact!"<<endl;
    }
};

int main(){
    Phone_soft* m_ptr = new Phone_soft_game();
    Phone_type *p_mtr = new Phone_typeA(m_ptr);
    p_mtr->operate();
    return 0;
}

整体看下来,和工厂模式十分相似,但桥接模式更注重的是对象间的组合来“实现”用户的需求,而不是构建一个对象的过程。随着独立的维度越来越多,继承带来的麻烦就十分明显了,高度的耦合会导致扩展性极差,因此必须遵循合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承。

参考链接:
(http://www.runoob.com/design-pattern/bridge-pattern.html)
http://www.cnblogs.com/jiese/p/3164940.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值