桥接模式

定义:

  将抽象部分与它的实现部分分离,使他们都可以独立的变化。

  这里的抽象和实现分离是指把实现的多种方式独立出来,让他们各自变化;实现系统可能有多角度分类,每一种分类都有可能变化,把这种多角度分离出来让它们独立变化,减少它们的耦合,这就是桥接模式。

  比如手机这个抽象,它的实现既可以按照品牌分类,也可以按照软件分类;品牌和软件各自又都会变化(增加品牌,增加软件等),桥接模式核心意图就是把这些实现独立出来。

 

结构图: 

桥接模式_第1张图片

 

代码(手机有软件分类和品牌分类两个维度)

 //抽象Abstraction(手机品牌抽象)

class PhoneBrand

{

protected:

   PhoneSoft cPhoneSoft

public:

  //设置手机软件方法(桥接方法)

   void SetPhoneSoft(const PhoneSoft& cPhoneSoft)

  {

     this.cPhoneSoft = cPhoneSoft

  }

  //抽象软件运行方法

  void run() = 0;

}

 

//RefinedAbstraction(具体品牌)
class PhoneBrandA : PhoneBrand

{

public:

  //软件运行方法

  void run()

   {
    soft.run();
  }

}

//Implementor(手机软件抽象类)

 

class PhoneSoft

{

public:

   void run () = 0;

}

 //ConcreteImplementorA(具体手机软甲:游戏)

class PhoneSoftGame : PhoneSoft

{

public:

  //软件游戏的实现

   void run () 

  {

    。。。;

  }

}

 //ConcreteImplementorB(具体手机软甲:MP3)

class PhoneSoftMP3 : PhoneSoft

{

public:

  //软件mp3的实现

   void run () 

  {

    。。。;

  }

}

//客户端(实现一个带有游戏和mp3软件的品牌A手机)

PhoneBrand* A = new PhoneBrandA("A");//创建品牌手机A

PhoneSoftGame cPhoneSoftGame;

A.SetPhoneSoft(cPhoneSoftGame);//加载游戏软件

A.run();

PhoneSoftMP3 cPhoneSoftMP3;

A.SetPhoneSoft(cPhoneSoftMP3);//加载mps软件

A.run();

 

使用时机:

  当需要多角度去分类实现对象,而只是用继承会造成大量类的增加,还会违背开闭原则,这时请考虑桥接模式。

 

优点:

1、 桥接模式提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统。

2、实现细节对客户透明,可以对用户隐藏实现细节。

 

缺点:

1、桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程。

2、桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用范围具有一定的局限性

你可能感兴趣的:(桥接模式)