【每日一记】设计模式——适配器模式

23 篇文章 0 订阅
23 篇文章 0 订阅

概述

  • 定义:将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作
  • 适用场景:被使用接口的与当前系统不兼容,但又无法修改接口时可以使用适配器模式

实现

类适配器

// 被适配的类
public class Adaptee {
    // 不兼容的方法
    public void operation2() {
        System.out.println("adaptee");
    }
}
// 当前系统接口
public interface ITarget {
    void operation();
}
// 适配器
public class Adapter extends Adaptee implements ITarget {
    @Override
    public void operation() {
        super.operation2();
    }
}
// 客户端
public class Client {
    public static void main(String[] args) throws Exception {
        ITarget target = new Adapter();
        target.operation();
    }
}

可以看出类适配器使用继承方式完成适配,但是java不支持多继承,也就是说类适配器只能服务于一个被适配对象,而且由于适配器是被适配的类的子类,被适配类的属性、方法都会暴露给适配器,无疑会影响安全性和可控性,因此此方式应用较少

对象适配器

// 适配器
public class Adapter implements ITarget {
    private Adaptee adaptee;
    // 不使用继承而改用关联
    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    @Override
    public void operation() {
        adaptee.operation2();
    }
}
// 客户端
public class Client {
    public static void main(String[] args) throws Exception {
        Adaptee adaptee = new Adaptee();
        ITarget target = new Adapter(adaptee);
        target.operation();
    }
}

对象适配器抛开了多继承的限制,可以服务于多个被适配对象

实际应用

java.io.InputStreamReader

在java中InputStream是面向字节流的,而Reader是面向字符流的,这两个输入流是完全不兼容的两套API,因此JDK中提供了适配器InputStreamReader实现了字节流到字符流的转换

// 对象适配器
InputStream ins = new FileInputStream("1.txt");// 被适配对象
Reader reader = new InputStreamReader(ins);// Reader为目标接口,InputStreamReader为适配器
reader.read();// 调用目标接口方法
reader.close();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值