设计模式之七:桥接模式

本文介绍了如何通过桥接模式解决数据结构由多个维度组成时导致的类数量爆炸问题。以装水果包装的大小和材质为例,说明如何将继承关系转换为组合关系,用抽象类和接口来分离抽象部分与实现部分,从而实现更灵活的扩展。在测试案例中,通过创建不同种类的包装对象展示了桥接模式的应用,提高了代码的可维护性和扩展性。
摘要由CSDN通过智能技术生成

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

将继承关系转换成组合关系,用组合表示多维度的数据


事例

需求:装水果的包装有两个维度的分类,大小和材质
存在的问题:要创建所有种类的包装,需要有3*2=6个类。且每新增一个分类,类的数量就会乘积式增长

种类的组合如图
在这里插入图片描述

解决问题:
从每个维度入手,以大小为主要维度用抽象类BagAbstraction表示,材质维度用接口Material表示
BagAbstraction中持有Material对象即可

结构如图:
在这里插入图片描述

数据结构如下:
只形成数据的抽象部分

// 材质及其实现类
public interface Material {

    class Plastic implements Material {
    }

    class Paper implements Material {
    }
}

// 大小及其实现类
public abstract class BagAbstraction {
    public Material mMaterial;

    public static class BigBag extends BagAbstraction {
    }

    public static class MidBag extends BagAbstraction {
    }

    public static class SmallBag extends BagAbstraction {
    }
}

测试:
创建对象时才是数据的实现部分

    public void bridge() {
        // 大号包装
        BagAbstraction.BigBag bigBag = new BagAbstraction.BigBag();
        // 塑料包装
        bigBag.mMaterial = new Material.Plastic();
    }

思路

  1. 挑选一个维度为主要维度,用抽象类表示
  2. 其他维度用接口表示
  3. 抽象类中持有其他维度的对象,从而建立关联关系
  4. 所有种类都去实现对应维度的抽象类/接口
  5. 构建具体数据类时,先创建一个主要维度的对象,其他维度注入到成员中即可

总结

适用场景

当一个数据结构由多个维度组成时。数据类则需要继承/实现多个接口(代码如下),导致数据类的数量爆炸

public class BigPlasticBag extends BagAbstraction implements Plastic {
}

优点

  • 分离了抽象部分和实现部分
  • 扩展性强。新增种类时,只需要在一个维度上添加种类

缺点

  • 关联关系在抽象层,需要掌握系统的抽象关系
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哈哈利波特

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值