一、概念
将抽象部分与它的实现部分分离,使它们都可以独立变化。实现系统可能有多角度分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少它们之间的耦合
二、结构图
三、代码实现
class Program
{
static void Main(string[] args)
{
var handset = new HandsetBrandM();// M 牌手机
handset.SetHandsetSoft(new HandsetGame()); // 安装游戏软件
handset.Run(); // 运行软件
handset.SetHandsetSoft(new HandsetAddressList()); // 安装通讯录
handset.Run();
}
}
// 手机品牌抽象类
abstract class HandsetBrand
{
protected HandsetSoft HandsetSoft;
// 设置手机软件
public void SetHandsetSoft(HandsetSoft handsetSoft)
{
HandsetSoft = handsetSoft;
}
// 运行
public abstract void Run();
}
// 具体手机品牌
class HandsetBrandM : HandsetBrand
{
public override void Run()
{
if (HandsetSoft != null)
{
Console.WriteLine("M 牌手机运行:");
HandsetSoft.Run(); // 实际上是具体软件在运行
}
}
}
class HandsetBrandN : HandsetBrand
{
public override void Run()
{
if (HandsetSoft != null)
{
Console.WriteLine("N 牌手机运行:");
HandsetSoft.Run(); // 实际上是具体软件在运行
}
}
}
// 手机软件抽象类
abstract class HandsetSoft
{
public abstract void Run();
}
// 具体手机软件
class HandsetAddressList : HandsetSoft
{
public override void Run()
{
Console.WriteLine("通讯录");
}
}
class HandsetGame : HandsetSoft
{
public override void Run()
{
Console.WriteLine("游戏");
}
}
四、优点
- 解耦抽象部分和实现部分,使它们可以独立地变化和演化。
- 提高了系统的可扩展性,可以方便地添加新的抽象部分和实现部分。
- 提供了继承的替代方案,避免了类爆炸问题。
五、应用
- 游戏平台和游戏引擎的桥接:在游戏开发中,桥接模式可以用于将游戏平台(如PC、手机、掌机)与游戏引擎(如Unity、Unreal Engine)进行桥接。这样,可以在不同平台上使用相同的游戏引擎,同时也可以在同一平台上使用不同的游戏引擎。
- 操作系统和文件系统的桥接:在操作系统中,桥接模式可以用于将操作系统和不同的文件系统进行桥接。抽象部分定义了文件系统的操作接口,实现部分则负责具体文件系统的实现,如Windows文件系统、Linux文件系统等。
- 手机品牌和手机软件的桥接:在手机应用开发中,桥接模式可以用于将手机品牌(如苹果、三星)与手机软件进行桥接。抽象部分定义了手机软件的功能接口,实现部分负责具体的软件实现。
- 数据源和数据展示的桥接:在数据展示应用中,桥接模式可以用于将数据源(如数据库、API)与数据展示进行桥接。抽象部分定义了数据展示的方式和格式,实现部分则负责从数据源中获取数据并进行展示。
- 电视和遥控器的桥接:在家用电器中,桥接模式可以用于将电视和遥控器进行桥接。抽象部分定义了遥控器的操作接口,实现部分负责具体的电视控制实现。
- 操作系统和设备驱动的桥接:在操作系统开发中,桥接模式可以用于将操作系统和设备驱动进行桥接。抽象部分定义了设备的通用接口,实现部分则负责具体设备驱动的实现。