设计模式演化之桥接模式

设计模式中的桥接模式通过将抽象部分与实现部分解耦,使得两者可以独立变化。在面临多维度组合导致大量类的情况时,通过桥接模式可以减少类的数量,提高代码的可维护性和扩展性。例如,一个绘图工具在绘制不同图形和颜色时,通过组合而非继承来实现,降低理解与设计复杂度,同时保持调用方的透明性。
摘要由CSDN通过智能技术生成
定义

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

演化

1.请设计一个绘图工具,功能比较简单,它能绘制不同的图形,和不同的颜色。为了让绘制对象具备统一的绘制行为,我们一般会抽象出来Shape和Color两个接口。

public interface Shape {
    void drawShape();
}
public interface Color {
    void drawColor();
}

2.想让一个类具备两个接口的功能,可以让具体的绘制对象去实现这两个接口,如绘制一个红色的圆。

public class RedCircle implements Shape, Color {
    @Override
    public void drawColor() {
        System.out.println("Red");
    }

    @Override
    public void drawShape() {
        System.out.println("Circle");
    }
}

在Shape和Color的实现类极少的情况下,这种写法已经实现了预期的需求。但显然,一个绘图工具可绘制的东西不可能如此简单。按照这个写法,如果有10种图形,10种颜色。为了满足调用方绘制图形的所有要求,我们需要预先定义100个实现类,这显然是行不通的。虽然一般情况下,工具的封装需要尽量减少调用方的麻烦,但在定义如此复杂的情况下就需要重新权衡利弊了。

3.分析解决2中的问题,可以发现,Shape和Color本质上是两个完全不同的纬度。如果仅仅定义各个纬度的实现类,那只要20个实现类就足够完成了。而当调用方需要这两个纬度的属性时,只需要多出一步组装的过程,这样看来是十分划算的了。重新定义Circle类

public class Circle implements Shape {
    
    private Color color;

    public Circle(Color color) {
        this.color = color;
    }
    
    @Override
    public void drawShape() {
        System.out.println("Circle");
        color.drawColor();
    }
}

通过改变给Circle传入的Color实现类,Circle具备了绘制各种颜色图形的能力。这也就完成了桥接模式。
简单来讲,它就是将一个复杂的类,先分离成不同纬度的组成部分,使得各个纬度的变化互不影响,且各个纬度的实现类数量有限。然后各个纬度的成品交给调用方去组装,从而避免了使用继承时实现类爆炸的后果。

优点:

1、抽象和实现的分离
2、优秀的扩展能力,两纬度的变化修改变更较为简单
3、实现细节对客户透明,调用方知道了具体对象的创建过程

缺点

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值