C++ 桥接模式(Bridge)

本文深入解析桥接模式,一种设计模式,用于解决多个维度变化的问题,通过将抽象与其实现分离,达到各自独立变化的目的。文章通过代码示例展示了如何在手机应用与软件开发中运用桥接模式,实现不同手机品牌与软件间的灵活组合。

简介

桥接模式(Bridge):将抽象部分与它的实现部分分离,使他们都能够独立地变化。

作用

解决在有多种可能会变化的情况下,用继承会造成类越来越复杂问题,扩展起来不灵活。

应用场景

设计中有超过一维的变化我们就可以用桥模式。如果只有一维在变化,那么我们用继承就可以圆满的解决问题。

代码如下:

#include <iostream>
#include <string>
#include <memory>

///////////////////////////////////////
//软件基类
class software
{
public:
    software(void){}
    virtual ~software(void){}

public:
    virtual void opt(void) = 0;
};
//手机基类
class mobilephone
{
public:
    mobilephone(void){}
    virtual ~mobilephone(void){}

public:
    virtual void opt() = 0;
};
class mobilephone_sw
{
public:
    mobilephone_sw(std::shared_ptr<software> sw)
		: m_software(sw)
	{
			
	}
    virtual ~mobilephone_sw(void){}

public:
    virtual void opt() = 0;
	std::shared_ptr<software> m_software;
};
///////////////////////////////////////
//苹果手机
class iphone : public mobilephone_sw
{
public:
    iphone(std::shared_ptr<software> sw) : mobilephone_sw(sw){}
    virtual ~iphone(void){}

public:
    void opt(void)
	{
		std::cout << "opt : this is iphone" << std::endl;
		m_software->opt();
	}
};
//华为手机
class huawei : public mobilephone_sw
{
public:
    huawei(std::shared_ptr<software> sw): mobilephone_sw(sw){}
    virtual ~huawei(void){}

public:
    void opt(void)
	{
		std::cout << "opt : this is huawei" << std::endl;
		m_software->opt();
	}

};
///////////////////////////////////////
//软件 :王者荣耀
class wangzhe : public software
{
public:
    wangzhe(void){}
    virtual ~wangzhe(void){}

public:
    virtual void opt(void)
	{
		std::cout << "opt : 王者荣耀 !" << std::endl;
	}
};
//软件 : 淘宝
class taobao : public software
{
public:
    taobao(void){}
    virtual ~taobao(void){}

public:
    virtual void opt(void)
	{
		std::cout << "opt : 淘宝 !" << std::endl;
	}
};
///////////////////////////////////////
int main()
{
	std::cout << "start-up .." << std::endl;
	std::shared_ptr<wangzhe> p_wz = std::make_shared<wangzhe>();
	std::shared_ptr<taobao>  p_tb = std::make_shared<taobao>();
	
	std::shared_ptr<iphone> p_ip = std::make_shared<iphone>(p_wz);
	std::shared_ptr<huawei> p_hw = std::make_shared<huawei>(p_tb);
	
    p_ip->opt();
    p_hw->opt();
	
	std::cout << "done .." << std::endl;
    return 0;
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值