结构型 桥接模式

简介: 结构型 桥接模式

桥接模式/接口模式(Bridge Pattern):将抽象部分与实现部分分离,使它们都可以独立的变化。 提供桥接的接口,使两者可以独立变化却互不影响(可以与继承配合,实现各种不同的组合)

桥接模式

适用场景:

跨平台应用、 支持多种类型的数据库服务器,与多个特定种类 (例如云平台和社交网络等) 的 API 供应商协作时。

硬件与软件操作系统的适配

源码Demo:

如:要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,我们可以设计根据需要自己组合,这时就可以用到桥接模式。

1:A平台有一套构建形状对象(颜色,形状类型属性)的接口。

2:B平台有一套构建形状对象(颜色,形状类型属性)的接口。

3:用一个桥接类,继承的方式实现不同的平台接口的封装。

#include <iostream>
#include <string.h>
using namespace std;
/***************************
  为了适配不同的接口,做中间封装类
样例分析:
  定义一个基础桥接类,不同类型接口的封装,用不同的子类去构建。
  1:A平台有一套构建形状对象(颜色,形状类型属性)的接口。
  2:B平台有一套构建形状对象(颜色,形状类型属性)的接口。
  3:用一个桥接类,继承的方式实现不同的平台接口的封装。
扩展:
  可以扩展跨平台接口的管理
  可以扩展不同数据库接口的管理
***************************/
//假设有两个平台有两套接口 A平台 和B平台
class AplatfromInterface{
public:
  AplatfromInterface():m_shape(""), m_color("") {}
  ~AplatfromInterface() {}
  void setShapeA(string &shape)
  {
    m_shape = shape;
  }
  void setColorA(string &color)
  {
    m_color = color;
  }
  string & getShapeA()
  {
    return m_shape;
  }
  string & getColorA()
  {
    return m_color;
  }
private:
  string m_shape;
  string m_color;
};
class BplatfromInterface{
public:
  BplatfromInterface():m_shape(""), m_color("") {}
  ~BplatfromInterface() {}
  void setShapeB(string &shape)
  {
    m_shape = shape;
  }
  void setColorB(string &color)
  {
    m_color = color;
  }
  string & getShapeB()
  {
    return m_shape;
  }
  string & getColorB()
  {
    return m_color;
  }
private:
  string m_shape;
  string m_color;
};
//定义一个桥接基础类,生成目标对象
class Shape{
  //创建一个shape形状的具体对象,子类是真正的实现
public:
  virtual void CreateShape() = 0; //可以传入入参按需构造
  virtual void PrintShape() = 0 ;
  virtual ~Shape() {}
};
//A平台上形状类接口的封装 调用a平台上的类对象的接口
class AplatfromShape: public Shape{
public:
  AplatfromShape() {
    m_a = new AplatfromInterface();
  }
  ~AplatfromShape() {
    if(m_a != nullptr)
    {
      delete m_a;
      m_a = nullptr;
    }
  }
  void CreateShape() override
  {
    string shape = "ashape";
    string color = "acolor";
    m_a->setShapeA(shape);
    m_a->setColorA(color);
  }
  void PrintShape() override
  {
    cout<<"platfrom:"<<m_a->getShapeA() <<"   "<<m_a->getColorA()<<endl;
  }
private:
  AplatfromInterface* m_a;
};
//B平台上形状类接口的封装 调用B平台上的类对象的接口
class BplatfromShape: public Shape{
public:
  BplatfromShape() {
    m_b = new BplatfromInterface();
  }
  ~BplatfromShape() {
    if(m_b != nullptr)
    {
      delete m_b;
      m_b = nullptr;
    }
  }
  void CreateShape() override
  {
    string shape = "bshape";
    string color = "bcolor";
    m_b->setShapeB(shape);
    m_b->setColorB(color);
  }
  void PrintShape() override
  {
    cout<<"platfrom:"<<m_b->getShapeB() <<"   "<<m_b->getColorB()<<endl;
  }
private:
  BplatfromInterface* m_b;
};
int main()
{
  //使用的时候,不必过多关注接口 根据不同的平台,初始化稍微差异,其他不变
  //如果在A平台 这样用:
  Shape * a_platfrom = new AplatfromShape();
  a_platfrom->CreateShape();
  a_platfrom->PrintShape();
  delete a_platfrom; 
  a_platfrom = nullptr;
  //b 平台可以这样用
  Shape * b_platfrom = new BplatfromShape();
  b_platfrom->CreateShape();
  b_platfrom->PrintShape();
  delete b_platfrom; 
  b_platfrom = nullptr;
  return 0;
}
目录
相关文章
|
7月前
|
设计模式 Java 开发者
Java设计模式【七】:桥接模式
Java设计模式【七】:桥接模式
48 0
|
设计模式
结构型设计模式06-桥接模式
结构型设计模式06-桥接模式
37 0
|
2月前
|
设计模式 缓存 C#
适配器模式与桥接模式:一分钟浅谈
【10月更文挑战第14天】本文介绍了面向对象设计中的适配器模式和桥接模式,包括它们的概念、应用场景、实现方式及常见问题。适配器模式通过接口转换解决不兼容问题,适用于系统扩展和遗留系统升级;桥接模式通过分离抽象和实现提高灵活性,适用于多维度变化和避免类爆炸。文中还提供了C#代码示例以加深理解。
46 3
|
3月前
|
设计模式 Java
Java设计模式-桥接模式(9)
Java设计模式-桥接模式(9)
|
2月前
|
设计模式 Java
Java设计模式之桥接模式
这篇文章介绍了Java设计模式中的桥接模式,包括桥接模式的目的、实现方式,并通过具体代码示例展示了如何分离抽象与实现,使得两者可以独立变化。
49 0
|
6月前
结构型模式之桥接模式
结构型模式之桥接模式
结构型模式之桥接模式
|
6月前
|
设计模式 Java
Java设计模式之桥接模式详解
Java设计模式之桥接模式详解
|
7月前
|
设计模式 Java 关系型数据库
聊聊Java设计模式-桥接模式
桥接(Bridge)模式是指将抽象部分与实现部分相分离,使它们都可以独立的发生变化。
90 7
聊聊Java设计模式-桥接模式
|
设计模式 Java 数据库连接
深入Java设计模式之桥接模式
深入Java设计模式之桥接模式
85 0
|
设计模式
设计模式-结构型模式:桥接模式
设计模式-结构型模式:桥接模式