结构性模式--桥接模式

桥接模式

将抽象部分与它的实现部分解耦,使得两者都能够独立变化。

(桥接模式是连接两个或多个不同维度的东西,而且这两个维度又经常变化。比如图形既可按形状

分,又可按颜色分。)

组成模块

实现类接口:定义实现接口,提供基本操作的接口。

具体实现类:实现实现接口的具体类。

抽象类:定义抽象类的接口,通常是抽象类,而不是接口,通常包含对实现接口的引用。

扩展抽象类:对抽象的扩展,可以是抽象类的子类或具体实现类。

上述可能还不能特别好理解桥接模式,下面举一个例子:

基于一个图形,我们现在想要一个正方形和一个圆形。同时还要给图形上色,颜色要红色和绿色。

这时我们可以创建四个类,红色的正方形、红色的圆形、绿色的正方形、绿色的圆形。那假如我还

要黄色,我们可以再增加两个类,黄色的正方形、黄色的圆形。那假如我们再要一个长方形,那就

要增加三个类,红色的正方形、绿色的长方形、黄色的长方形。

 照这样下去,所有组合类的数量将以几何级数增长。。。。。

桥接模式主要解决的问题就是,新增一个颜色或者新增一个图形,跟另一个纬度没有关系,就是说

新增一个颜色,跟图形没有关系。新增一个图形,跟颜色没有关系。

Demo

1、定义接口

//支持的颜色
interface IColor
{
    void SupportColor();
}

2、实现接口

// 支持红色
class RedColor : IColor
{
    public void SupportColor()
    {
        Console.WriteLine("Support Red color");
    }
}

// 支持绿色
class GreenColor : IColor
{
    public void SupportColor()
    {
        Console.WriteLine("Support Green color");
    }
}

3、定义抽象类

// 抽象部分:形状
abstract class Shape
{
    protected IColor color;

    public Shape(IColor color)
    {
        this.color = color;
    }
    
    //画形状抽象方法
    public abstract void Draw();
}

4、扩展抽象类

// 具体抽象部分:圆形
public class Circle : Shape
{
    public Circle(IColor color) : base(color) { }

    public override void Draw()
    {
        Console.Write("Drawing Circle in ");
        //后上色
        color.ApplyColor();
    }
}

// 具体抽象部分:正方形
public class Square : Shape
{
    public Square(IColor color) : base(color) { }

    public override void Draw()
    {
        //先上色
        color.ApplyColor();
        Console.Write("Drawing Square in ");
    }
}

5、调用

IColor redColor = new RedColor();
IColor greenColor = new GreenColor();

Shape redCircle = new Circle(redColor);
Shape greenSquare = new Square(greenColor);

redCircle.Draw();
greenSquare.Draw(); 

Shape类其实扮演的角色就是桥接角色,它将图形与颜色关联起来。

现在假如说,图形要加上动态效果,例如闪烁、旋转等。

这时我们再定义一个接口,表示动态效果,并且有不同的实现,比如闪烁、旋转。

再将动态效果的接口放到Shape类中,这样就实现了一个事物,不同纬度之间的扩展,互不影响。

优点

1、解耦性:桥接模式通过将抽象部分和实现部分分离,使它们可以独立变化,从而降低了它们之

间的耦合性。这使得系统更加灵活,可以更容易地扩展和修改。

2、可扩展性:由于桥接模式将抽象部分和实现部分分离,可以在不修改现有代码的情况下轻松地

添加新的抽象部分或实现部分,从而实现系统的可扩展性。

缺点

1、增加复杂度:桥接模式引入了额外的抽象层,可能会增加系统的复杂度,特别是在设计较小规

模的系统时可能会显得过于繁琐。

2、抽象和实现的选择:在桥接模式中,需要正确地选择抽象部分和实现部分的组合,这需要一定

的经验和设计能力,不合适的选择可能会导致系统设计不佳。

适用场景

1、一个类存在多个独立变化的维度:当一个类存在多个独立变化的维度,并且希望通过组合这些

维度来减少类的数量时,桥接模式可以帮助实现这一目标。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值