前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Java设计模式之适配器模式

Java设计模式之适配器模式

作者头像
程裕强
发布2022-05-06 19:45:14
发布2022-05-06 19:45:14
26700
代码可运行
举报
运行总次数:0
代码可运行

1、适配器模式

1.1原理

适配器模式中的角色

  • 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
  • 需要适配的类(Adaptee):需要适配的类或适配者类。
  • 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。

现方式主要有两种:

  • 类的适配器模式(采用继承实现)
  • 对象适配器(采用对象组合方式实现)

1.2 类的适配器(类的继承)

(1)目标接口

代码语言:javascript
代码运行次数:0
复制
/**
 * 目标接口,也就是我们期望的接口
 * @author hadron
 *
 */
public interface Target {
    //普通功能
    public void request();
}

(2)已有功能类

代码语言:javascript
代码运行次数:0
复制
/**
 * 已存在的、具有特殊功能、但不符合我们的要求
 * @author hadron
 *
 */
public class Adaptee {
    public void specificRequest() {
        System.out.println("三孔插座");
    }
}

(3)适配器类

代码语言:javascript
代码运行次数:0
复制
/**
 * 适配器类,继承了被适配类Adaptee,同时实现标准接口Target
 * @author hadron
 */
public class Adapter extends Adaptee implements Target{
    @Override
    public void request() {
        System.out.println("适配器类:转换为双孔插座");
        this.specificRequest();
    }
}

(4)Client

代码语言:javascript
代码运行次数:0
复制
public class AdapterDemo {
    public static void main(String[] args) {
        Target adapter = new Adapter(); 
        //通过适配器调用特殊功能
        adapter.request();  
   }
}

(5)运行结果

代码语言:javascript
代码运行次数:0
复制
适配器类:转换为双孔插座
三孔插座

1.3 对象适配器(对象组合)

(1)适配器类

代码语言:javascript
代码运行次数:0
复制
/**
 * 适配器类,直接关联被适配类,同时实现标准接口
 * 采用对象组合方式实现
 * @author hadron
 *
 */
public class AdapterObject implements Target{
    // 直接关联被适配类
    private Adaptee adaptee;
    // 可以通过构造函数传入具体需要适配的被适配类对象
    public AdapterObject(Adaptee adaptee) {
        this.adaptee = adaptee;
    }
    @Override
    public void request() {
        // 这里是使用委托的方式完成特殊功能
        System.out.println("适配器类:转换为双孔插座");
        this.adaptee.specificRequest();
    }
}

(2)Client

代码语言:javascript
代码运行次数:0
复制
public class AdapterObjectDemo {
    public static void main(String[] args) {
        Target adapter = new AdapterObject(new Adaptee());  
        adapter.request();  
    }
}

(3)运行结果

代码语言:javascript
代码运行次数:0
复制
适配器类:转换为双孔插座
三孔插座

2、Java IO中的适配器模式

(1)Java IO

适配器作用就是讲一个接口适配到另一个接口,在Java 的I/O类库中有很多这样的需求,如将字符串数据转变成字节数据保存到文件中,将字节数据转变成流数据等。

以InputStreamReader和OutputStreamWriter类为例。 InputStreamReader和OutputStreamWriter类分别继承了Reader和writer接口,但是要创建他们的对象必须在构造函数中传入一个InputStream和OutputStream的实例,InputStreamReader和OutputStreamWriter类的作用也就是将InputStream和OutputStream适配到Reader和Writer。适配器是InputStreamReader,源角色是InputStream代表的实例对象,目标接口就是Reader类。

(2)样例演示

代码语言:javascript
代码运行次数:0
复制
package adapter;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;

public class AdapterIO {
    public static void main(String[] args) throws Exception{
        File f = new File("c:\\words.txt") ;   
        //字节输入流
        InputStream in=new FileInputStream(f);
        //将字节输入流转换为字符输入流(适配器模式)
        Reader reader = new InputStreamReader(in) ;  
        //从Reader中最多读取1024个字符
        char buffer[] = new char[1024] ;  
        int len = reader.read(buffer) ; 
        reader.close() ;    // 关闭  
        System.out.println(new String(buffer,0,len)) ;  
    }
}

输出结果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、适配器模式
    • 1.1原理
    • 1.2 类的适配器(类的继承)
    • 1.3 对象适配器(对象组合)
    • 2、Java IO中的适配器模式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档