适配器模式

55 阅读2分钟

适配器模式

适配器模式(Adapter Pattern)充当两个不兼容接口之间的桥梁。它通过一个中间件(适配器)将一个类的接口转换成客户期望的另一个接口,使原本不能一起工作的类能够协同工作。


结构

  • 目标接口:当前对象所期待的接口,是抽象类或者接口。
  • 适配者类:被访问的组件接口
  • 适配器类:他是一个转换器,通过继承或者引用适配者对象,把适配者接口转换为目标接口。

下图是经典的插座案例图:

1727845914699.jpg

对象适配器代码

package wnan.adapter.sd;

/*****UTF-8*****
 * Description: sd卡读写接口 目标接口类
 * Author: wnan
 * Create Date: 2024/10/2 13:25
 * Proverbs: 吃得苦中苦,方为人上人
 */
public interface SDCard {
    String readSDCar();
    void writeSDCard(String info);
}
package wnan.adapter.sd;

/*****UTF-8*****
 * Description: sd卡实现
 * Author: wnan
 * Create Date: 2024/10/2 13:26
 * Proverbs: 吃得苦中苦,方为人上人
 */
public class SDCardImpl implements SDCard{
    @Override
    public String readSDCar() {
        return "sd卡数据";
    }

    @Override
    public void writeSDCard(String info) {
        System.out.println("写入SD卡"+info);
    }
}
package wnan.adapter.tf;

/*****UTF-8*****
 * Description: tf读取接口  适配者类接口
 * Author: wnan
 * Create Date: 2024/10/2 13:27
 * Proverbs: 吃得苦中苦,方为人上人
 */
public interface TFCard {
    String readTFCar();
    void writeTFCard(String info);
}
package wnan.adapter.tf;

/*****UTF-8*****
 * Description: tf卡实现
 * Author: wnan
 * Create Date: 2024/10/2 13:28
 * Proverbs: 吃得苦中苦,方为人上人
 */
public class TFCardImpl implements TFCard{
    @Override
    public String readTFCar() {
        return "TF卡数据";
    }

    @Override
    public void writeTFCard(String info) {
        System.out.println("写入TF卡"+info);
    }
}
package wnan.adapter;

import wnan.adapter.sd.SDCard;
import wnan.adapter.tf.TFCard;

/*****UTF-8*****
 * Description: 适配器类
 * Author: wnan
 * Create Date: 2024/10/2 13:31
 * Proverbs: 吃得苦中苦,方为人上人
 */
public class SDAdapter implements SDCard {

    private TFCard tfCard;

    public SDAdapter(TFCard tfCard){
        this.tfCard=tfCard;
    }

    @Override
    public String readSDCar() {
        return tfCard.readTFCar();
    }

    @Override
    public void writeSDCard(String info) {
        tfCard.writeTFCard(info);
    }
}
package wnan.adapter;

import wnan.adapter.sd.SDCard;
import java.util.Optional;

/*****UTF-8*****
 * Description: 电脑产品
 * Author: wnan
 * Create Date: 2024/10/2 13:10
 * Proverbs: 吃得苦中苦,方为人上人
 */
public class Computer {
    private SDCard sdCard;

    public void setSdCard(SDCard sdCard){
        this.sdCard = sdCard;
    }

    public String readSDCar() {
        Optional.ofNullable(sdCard).orElseThrow(()->new IllegalStateException("空指针异常"));
        return sdCard.readSDCar();
    }

    public void writeSDCard(String info) {
        Optional.ofNullable(sdCard).orElseThrow(()->new IllegalStateException("空指针异常"));
        sdCard.writeSDCard(info);
    }
}
package wnan.adapter;

import wnan.adapter.sd.SDCard;
import wnan.adapter.tf.TFCardImpl;

/*****UTF-8*****
 * Description: 适配器模式 对象适配器模式
 * Author: wnan
 * Create Date: 2024/10/1 20:56
 * Proverbs: 吃得苦中苦,方为人上人
 */
public class Client {
    public static void main(String[] args) {
        Computer computer = new Computer();

        SDCard sdCard =new SDAdapter(new TFCardImpl());
        computer.setSdCard(sdCard);
        String s = computer.readSDCar();
        System.out.println(s);
    }
}

源码 design_pattern