再谈bridge模式理解小例子

本文通过分析手机品牌和软件的独立扩展问题,探讨了桥接模式在降低耦合度和增强灵活性方面的应用。桥接模式通过将手机品牌和软件抽象为独立的基类,实现了两者解耦,从而简化了类结构和扩展操作。
摘要由CSDN通过智能技术生成

     今天回头看了原来写的bridge模式的文章,感觉还是太泛化、理论,不能够方便快速的理解,下面就借这《大话设计模式》中有关bridge模式的解释来谈谈实际实际应用解决的问题。

手机品牌和软件是两个概念,不同的软件可以在不同的手机上,不同的手机可以有相同的软件,两者都具有很大的变动性。如果我们单独以手机品牌或手机软件为基类来进行继承扩展的话,无疑会使类的数目剧增并且耦合性很高,(如果更改品牌或增加软件都会增加很多的变动)两种方式的结构如下:

 

所以将两者抽象出来两个基类分别是PhoneBrand和PhoneSoft,那么在品牌类中聚合一个软件对象的基类将解决软件和手机扩展混乱的问题,这样两者的扩展就相对灵活,剪短了两者的必要联系,结构图如下:

这样扩展品牌和软件就相对灵活独立,达到解耦的目的!

个人认为此模式重点实现是在手机品牌上,示例代码可能如下更合理

/// >虚拟软件基类
class PhoneSoft
{
public:
    PhoneSoft();
    virtual void runSoft();
    /// .... 
};

/// >通讯录子类
class PhoneSoftBook : public PhoneSoft
{
public:
    PhoneSoftBook();
    virtual void runSoft(){ cout << "book soft run!";}
};

/// >mp3子类
class PhoneSoftMp3 : public PhoneSoft
{
public:
    PhoneSoftMp3();
    virtual void runSoft(){ cout << "mp3 soft run!";}
};

/ > 其他soft子类


class PhoneBrand
{
public :
    void addNewSoft(PhoneSoft * soft){ m_softs.append(soft);}
    void runAllSoft()
    {
        foreach(PhoneSoft*item, m_softs)
        {
            item->runSoft();
        }
    }
private:
    QList<PhoneSoft*> m_softs;
};

class PhoneBrand_A : public PhoneBrand
{
public:
    PhoneBrand_A();
};


class PhoneBrand_B : public PhoneBrand
{
public:
    PhoneBrand_B();
};

void main()
{
    /// >创建通讯录
    PhoneSoft * soft = new PhoneSoftBook;
    
    /// A品牌手机添加通讯录软件
    PhoneBrand_A *aBrand = new PhoneBrand_A;
    aBrand->addNewSoft(soft);
    
    /// A品牌手机添加软件mp3
    soft = new PhoneSoftMp3;
    aBrand->addNewSoft(soft);
    
    /// B品牌手机添加通讯录软件
    soft = new PhoneSoftBook;
    PhoneBrand_B *bBrand = new PhoneBrand_B;
    bBrand->addNewSoft(soft);
    
    /// B品牌手机添加软件mp3
    soft = new PhoneSoftMp3;
    bBrand->addNewSoft(soft);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值