【设计模式】27.结构型模式-适配器(Adapter)

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路【设计模式】27.结构型模式-适配器(Adapter),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

一、描述

将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。

1.角色

(1)目标类(target):定义Client使用的与特定领域相关的接口。

(2)客户端类(Client):与符合Target接口的对象协同。

(3)需要适配的接口类(Adaptee):定义一个已经存在的接口,这个接口需要适配。

(4)适配器(Adapter):对Adaptee的接口与Target接口进行适配。

2.类图

在这里插入图片描述

3.适配器模式分为两类:类适配器和对象适配器。

(1)类适配器:

用一个具体的Adapter类对Adaptee和Target进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,类Adapter将不能胜任工作。
使得Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个子类。
仅仅引入了一个对象,并不需要额外的指针以间接得到apaptee.

(2)对象适配器:

允许一个Adapter与多个Adaptee—–即Adaptee本身以及它的所有子类同时工作,Adapter也可以一次给所有的Adaptee添加功能。
使得重定义Adaptee的行为比较困难。这就需要生成Adaptee的子类并且使得Adapter引用这个子类而不是引用Adaptee本身。

二、优点

1.解耦性:适配器让两个毫无关联的接口实现客户的功能。

2.提高代码的复用性:适配的两方不需要修改逻辑,只需要专注于自身功能即可。通过适配器,可以让适配类实现客户需求,而不需要修改原有代码。

3.提高系统扩展性:通过适配器适应多种场景。

三、缺点

1.过多使用适配器会使系统变得复杂且不好维护。

四、适用场景

1.当迁移系统时,如果不方便修改对外接口参数和返回时,可以添加适配器,将请求转化为新系统的请求。

五、示例

以”手机充电器将220V转为5V”为例

1.创建220V类

public class PowerSupply220 {
    public int output() {
        return 220;
    }
}

2.创建5V接口

public interface PowerSupply5V {
    int dc5V();
}

3.创建适配器实现5V接口

public class InterfaceAdapter implements PowerSupply5V {
    private PowerSupply220 powerSupply;

    public InterfaceAdapter(PowerSupply220 powerSupply) {
        this.powerSupply = powerSupply;
    }

    @Override
    public int dc5V() {
        return powerSupply.output() / 44;
    }
}

4.测试

@Slf4j
public class InterfaceAdapterTest {
    public static void main(String[] args) {
        InterfaceAdapter interfaceAdapter = new InterfaceAdapter(new PowerSupply220());
        log.info("output:{}", interfaceAdapter.dc5V());
    }
}

效果:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/158086.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!