Bridge桥接模式是一种结构型模式,它主要应对的是:由于类型的固有罗辑,使得类型具有两个或两个以上的纬度变化。也就是要求抽象不应依赖于实现细节,实现细节应依赖于抽象。
《设计模式》中说到将抽象部分与实现部分分离,使他们可以独立的变化。
举个例子更清楚些,好像我们平时玩的游戏中有PS版的,但是不是大家都有PS。这时我们等一段时间,一般会出PC版的或其他版本。由于支持游戏的平台不一样,但是如果我们编写的游戏程序为了适应另一种平台就要全部重新编写的话岂不是很麻烦。再加上游戏本身的变动,一句众人皆知的话:“死定了”。
现在我们来看看Bridge桥接模式,看看它是如何解决类似问题的,首先我们看看Bridge模式的结构。
实际上,我们要做到的是把变化的部分提出,对其抽象,使变化独立。那我们如何做呢?通过组合的方式将变化独立出去。将一个事物中的多个纬度变化分离。
下面举一个场景来理解一下,还是用汽车举例,我现在要一辆车(BMW或BORA)在路(WaterRoad或Cement)上跑。现在有两个纬度的变化点:汽车和路。也就是上图中的AbstractChangePoint1和AbstractChangePoint2。AbstractChangePoint1中包含有AbstractChangePoint2对象成员。。代码实现如下:
abstract class AbstractCar
{
public AbstractRoad road;
public AbstractCar(AbstractRoad road)
{
this.road = road;
}
public abstract string Run();
public abstract string Stop();
}
abstract class AbstractRoad
{
public abstract string GetRoadType();
}
以汽车为变化中心,用组装的方式将两个变化点结合起来。使路的变化和汽车隔离。下面来编写路的实现。
class WaterRoad:AbstractRoad
{
public override string GetRoadType()
{
return "It is WaterRoad";
}
}
class CementRoad:AbstractRoad
{
public override string GetRoadType()
{
return "It is Cement";
}
}
然后再来编写汽车的实现
class BMWCar:AbstractCar
{
public BMWCar(AbstractRoad road)
: base(road)
{
}
public override string Run()
{
return "BMW is running";
}
public override string Stop()
{
return "BMW is stopped";
}
}
class BROACar:AbstractCar
{
public BROACar(AbstractRoad road)
: base(road)
{
}
public override string Run()
{
return "BROA is running";
}
public override string Stop()
{
return "BROA is stopped";
}
}
然后我们在客户代码中调用这些类,首先,我想要这个场景是BMW在WaterRoad上跑,客户端代码如下:
static void Main(string[] args)
{
AbstractCar car = new BMWCar(new WaterRoad());
Console.WriteLine(car.road.GetRoadType());
Console.WriteLine(car.Run());
Console.WriteLine(car.Stop());
Console.Read();
}
实现结果如下:
It is WaterRoad
BMW is running
BMW is stopped
如果我现在要一辆BORA在Cement上跑,我们只要稍微修改一下car的实例化就可以,代码如下:
static void Main(string[] args)
{
AbstractCar car = new BROACar(new CementRoad());
Console.WriteLine(car.road.GetRoadType());
Console.WriteLine(car.Run());
Console.WriteLine(car.Stop());
Console.Read();
}
实现结果如下:
It is Cement
BROA is running
BROA is stopped
最后我们再来说说Bridge模式的要点:
1、Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的纬度来变化。
2、所谓抽象和实现沿着各自纬度的变化,即“子类化”它们,得到各个子类之后,便可以任意组合它们。
3、Bridge模式有时候类似于多继承方案,但是多继承方案往往违背单一职责原则(即一个类只有一个变化的原因),复用性比较差。Bridge模式是比多继承方案更好的解决方法。
4、Bridge模式的应用一般在“两个非常强的变化纬度”,有时候即使有两个变化的纬度,但是某个方向的变化纬度并不剧烈——换言之两个变化不会导致纵横交错的结果,并不一定要使用Bridge模式。
相关推荐
**桥梁模式(Bridge Pattern)详解** 桥梁模式是一种结构型设计模式,它将抽象部分与实现部分分离,使得它们可以独立地进行变化。这种模式的主要目的是为了将抽象化和实现化解耦,使得两者可以独立发展,增加了系统...
桥梁模式(Bridge Pattern)是设计模式中的一种结构型模式,它的核心思想是将抽象部分与实现部分分离,使得它们可以独立地进行变化。在这个主题中,我们将深入探讨桥梁模式的原理、结构以及如何在Java中实现。 首先...
LEDE项目:桥模式1 LEDE项目中的桥模式是一种特殊的操作模式,允许网关设备将所有流量转发到下游设备,使得设备可以在不同的网络环境中工作。在本文中,我们将详细介绍桥模式的工作原理、类型和应用场景。 桥模式...
桥模式是一种设计模式,主要目的是将抽象部分与其实现部分分离,使得它们可以独立地进行变化。在"桥模式(Qt平台)"中,我们将会看到如何在Qt框架下应用这个模式来增强软件的可扩展性和灵活性。Qt是一个流行的开源跨...
桥模式是一种结构型设计模式,它将抽象部分与其实现部分分离,使它们可以独立进行变化。在C++中,这种模式尤其有用,因为它允许我们通过指针或引用灵活地组合对象,从而实现多态性。 桥模式的核心在于将抽象...
**SCALANCE W 桥模式使用指南** 西门子的SCALANCE W系列是专为工业无线网络设计的一系列产品,它们提供了灵活、安全的无线连接解决方案。在桥模式(Bridge Mode)下,SCALANCE W设备可以作为两个或多个网络之间的...
【桥梁模式】是一种重要的设计模式,它属于对象的结构模式,有时也被称作柄体模式或接口模式。该模式的主要目的是将抽象部分与其实现部分分离,使它们能够独立进行变化。这种分离使得抽象和实现可以独立发展,提高了...
【基于Linux下桥模式的入侵检测系统研究】 在网络安全领域,入侵检测系统(Intrusion Detection System, IDS)扮演着至关重要的角色。传统的IDS通常分为基于网络的(NIDS)和基于主机的(HIDS)。NIDS通过监听网络...
《SANGFOR_WOC_v9.1_双网桥模式部署配置指导书》是由深信服科技有限公司编写的,旨在为用户提供详细的操作指南,帮助他们正确配置和部署双网桥模式的SANGFOR_WOC设备。文档包含了版本信息、修订历史以及使用反馈的...
《LEDE项目:可怜的人桥模式1》 在IT行业中,网络配置是一项至关重要的任务,特别是在家庭或小型企业网络环境中。本文主要探讨的是在没有硬件桥接功能的情况下,如何通过LEDE路由器实现一种称为“可怜的人桥模式”...
《桥梁模式DEMO》 桥梁模式是一种结构型设计模式,它将抽象部分与其实现部分分离,使它们可以独立地进行变化。这个模式的核心思想是将抽象类与实现类解耦,使得两者可以通过多态性独立发展,从而提高了系统的可扩展...
桥梁模式(Bridge Pattern)是一种结构型设计模式,旨在通过将抽象部分与它的实现部分分离,来使得它们可以独立地变化。该模式主要涉及两个角色:抽象化(Abstraction)和实现化(Implementor)。在PHP中实现桥梁...
西门子SCALANCE W桥模式使用指南zip,西门子SCALANCE W桥模式使用指南: 本文描述了SCALANCE W模块中的一些桥功能,例如VLAN和生成树协议。并阐述了桥功能协议的基本原理。而且通过一些具体的配置实例说明了使用这些...
行业资料-交通装置-一种基于桥模式的数据库审计方法.zip
桥模式(Bridge模式)是一种设计模式,主要用于将抽象部分与实现部分解耦,使得它们能够独立地变化。在Java中,这种模式可以帮助我们构建更加灵活和可扩展的系统。以下是关于桥模式的详细解释: 首先,理解桥模式的...
桥模式:将对摸个问题抽象的不同形式分别于该问题的具体实现部分相互分离,是它们都可以独立的裱花,并且能动态的结合。这个模式是面向对象的接口隔离原则的典型实现和具体的应用。使用桥模式可以讲对问题的抽象的...
中继网桥可以由单个桥接器配备分路器,或者两个桥接器背靠背工作于不同频段的无线网桥模式,以满足不同带宽需求。 总的来说,无线网桥在远程网络互连中扮演着重要角色,其应用模式多样,能够适应各种复杂的环境和...
设计模式是软件工程中的一种最佳实践,用于解决在开发过程中经常遇到的问题,提供了一种标准的解决方案。在Java编程中,设计模式的应用广泛且至关重要,能够提高代码的可读性、可维护性和可扩展性。以下是对标题和...