设计模式之六:适配器模式

适配两个不兼容的接口

将A接口转换成B接口


事例

需求:桔子包装用光了,想要用苹果包装来代替桔子包装。即AppleBag转换成OrangeBag

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

目标类(桔子包装):

public class OrangeBag implements Bag {
    @Override
    public void pack() {
        System.out.println("orange bag pack");
    }
}

源类(苹果包装):

public class AppleBag implements Bag {
    @Override
    public void pack() {
        System.out.println("apple bag pack");
    }
}

适配器类:
适配器类要extends目标类,这样才能代替目标类

public class OrangeBagAdapter extends OrangeBag {
    private AppleBag mAppleBag;

    public OrangeBagAdapter(AppleBag appleBag) {
        mAppleBag = appleBag;
    }

    @Override
    public void pack() {
        mAppleBag.pack();
    }
}

测试:

    public void adaptBag() {
        AppleBag appleBag = new AppleBag();
        // 将AppleBag适配成OrangeBag
        OrangeBag orangeBag = new OrangeBagAdapter(appleBag);
        orangeBag.pack();
    }

适配器的分类

  • 对象适配器:以组合(持有)的方式得到源类
  • 类适配器:以继承的方式成为源类

上面事例中的适配器持有了AppleBag对象,所以就是对象适配器
若AppleBag是接口,适配器去实现AppleBag,则就是类适配器

三个角色

  • 目标类:客户所需的接口
  • 源类(适配者类):要被转换的接口
  • 适配器类:extends/implements目标类,为目标类提供实例

总结

适用场景

当已有两个不兼容的接口,想让它们兼容工作时

优点

  • 将目标类与源类解耦,适配器来完成转换的工作,无需修改原有代码
  • 提高源类的复用性
  • 提高系统灵活性和扩展性,新增适配器即可

缺点

  • 使用适配器模式过多,会破坏系统结构、降低代码可读性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

哈哈哈利波特

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

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

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

打赏作者

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

抵扣说明:

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

余额充值