适配器Adapter示例demo

本文通过实例演示了适配器模式的应用,使原本接口不兼容的类能够协同工作。介绍了对象适配器和类适配器两种实现方式,并提供了详细的代码示例。

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

介绍

将一个类的接口转换成客户期望的另一个接口,适配器让原本不兼容的类可以合作无间。适配器模式属于补偿模式,专用来在系统后期扩展、修改时使用

示例demo

背景:让原本只有安卓充电接口的旅店同样支持ios接口充电

一、对象适配器

安卓充电:

/**
 * 安卓充电接口
 **/
public interface AndroidCharge {
    /**
     * 充电方法
     */
    void androidCharge();
}

/**
 * 安卓充电
 **/
public class Android implements AndroidCharge {
    @Override
    public void androidCharge() {
        System.out.println("安卓接口充电");
    }
}

旅馆:

/**
 * 旅馆,只有Android充电口
 **/
public class Hotel {
    private AndroidCharge androidCharge;

    public Hotel(AndroidCharge androidCharge) {
        this.androidCharge = androidCharge;
    }

    /**
     * 充电接口
     */
    public void charge(){
        this.androidCharge.androidCharge();
    }
}

ios充电:

/**
 * ios充电
 **/
public interface IosCharge {
    /**
     * 充电方法
     */
    void iosCharge();
}

/**
 * ios充电口充电
 **/
public class Ios implements IosCharge {
    @Override
    public void iosCharge() {
        System.out.println("ios接口充电");
    }
}

适配器:

/**
 * 适配器接口
 **/
public class ChargeAdapter implements AndroidCharge {
    private IosCharge ios;

    public ChargeAdapter(Ios ios) {
        this.ios = ios;
    }

    @Override
    public void androidCharge() {
        ios.iosCharge();
    }
}

测试类:

/**
 * 适配器测试
 **/
public class AdapterTest {
    @Test
    public void chargeTest() {
        // 原本只有Android充电口
        Hotel hotel = new Hotel(new Android());
        hotel.charge();

        System.out.println("*******************");

        // 使用适配器之后旅馆支持ios充电了
        ChargeAdapter chargeAdapter = new ChargeAdapter(new Ios());
        hotel = new Hotel(chargeAdapter);
        hotel.charge();
    }
}

运行结果:

二、类适配器

和上述对象适配器不同的地方是 适配器类内容不同

适配器:

/**
 * 适配器接口,这里采用继承方式,不再持有ios对象了
 **/
public class ChargeAdapter extends Ios implements AndroidCharge {

    @Override
    public void androidCharge() {
        this.iosCharge();
    }
}

测试类:

/**
 * 适配器测试
 **/
public class AdapterTest {
    @Test
    public void chargeTest() {
        // 原本只有Android充电口
        Hotel hotel = new Hotel(new Android());
        hotel.charge();

        System.out.println("*******************");

        // 使用适配器之后旅馆支持ios充电了
        ChargeAdapter chargeAdapter = new ChargeAdapter();
        hotel = new Hotel(chargeAdapter);
        hotel.charge();
    }
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值