java设计模式——适配器(Adapter)模式

适配器模式是一种设计模式,用于将不同接口的类进行适配,使不兼容的接口能够协同工作。例如,在一个场景中,电视的双孔插头无法插入三孔插座,通过创建一个适配器,可以将双孔插头转换为三孔接口,使其能够正常工作。适配器模式分为对象适配器和类适配器,根据具体需求选择使用。对象适配器通过持有原始接口的实例进行适配,而类适配器则通过继承原始接口并实现目标接口来达到适配目的。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


意图:

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

适用性:

你想使用一个已经存在的类,而它的接口不符合你的需求。

你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。

(仅适用于对象Adapter )你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。

举例,以家中的插头为例,常见的就是三孔与双孔两种插口,以插口为接口,命名

TriplePinpublic interface TriplePin {
    //参数分别为火线live,零线null,地线earth,三孔
    public void electrify(int l, int n, int e);
}

public interface DualPin {
    //这里没有地线,双孔
    public void electrify(int l, int n);
}

假设此时有一个电视机需要通电,但他插成了两孔的,插错了,如下:

public class TV implements DualPin {

    @Override//既然是两项插头,当然实现两项插标准
    public void electrify(int l, int n) {
        System.out.println("火线通电:" + l);
        System.out.println("零线通电:" + n);
    }

}

这时候就需要Adapter来解决他们之间的矛盾,对象适配器如下:

public class Adapter implements TriplePin {
 
 //意味着这个适配器内部是有一个双插接口的
     private DualPin dualPinDevice; 
 
     //创建适配器地时候,需要把双插设备接入进来
     public Adapter(DualPin dualPinDevice) {
         this.dualPinDevice = dualPinDevice;
     }
 
    //适配器实现的是目标接口
    @Override
    //实现的是三插标准
    public void electrify(int l, int n, int e) {
        //实际上调用了被适配设备的双插通电,地线e被丢弃了,当然如果e是别的什么有用的则就需要改动下方的逻辑了
        dualPinDevice.electrify(l, n);
    }

}

类适配器则不需要将两孔插头接入适配器中了,可以直接通过super调用上述的两孔接口,如下:

public class ClassAdapter extends TV implements TriplePin{

    @Override
    public void electrify(int l, int n, int e) {
        super.electrify(l, n);
    }

}

但缺点很明显,这个适配器只适合电视了或者和电视一样的三孔电器才能使用,单孔的则有需要新开一个适配器了,这个还要到具体场景具体业务而定使用对象又或者是类适配器了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值