频道栏目
首页 > 资讯 > Java > 正文

Java设计模式之适配器模式实例讲解

18-02-02        来源:[db:作者]  
收藏   我要投稿

1、适配器模式

1.1原理

适配器模式中的角色

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

现方式主要有两种:

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

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

(1)目标接口

/**
 * 目标接口,也就是我们期望的接口
 * @author hadron
 *
 */
public interface Target {
    //普通功能
    public void request();
}

(2)已有功能类

/**
 * 已存在的、具有特殊功能、但不符合我们的要求
 * @author hadron
 *
 */
public class Adaptee {
    public void specificRequest() {
        System.out.println("三孔插座");
    }
}

(3)适配器类

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

(4)Client

public class AdapterDemo {
    public static void main(String[] args) {
        Target adapter = new Adapter(); 
        //通过适配器调用特殊功能
        adapter.request();  
   }
}

(5)运行结果

适配器类:转换为双孔插座
三孔插座

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

(1)适配器类

/**
 * 适配器类,直接关联被适配类,同时实现标准接口
 * 采用对象组合方式实现
 * @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

public class AdapterObjectDemo {
    public static void main(String[] args) {
        Target adapter = new AdapterObject(new Adaptee());  
        adapter.request();  
    }
}

(3)运行结果

适配器类:转换为双孔插座
三孔插座

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)样例演示

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)) ;  
    }
}

输出结果

这里写图片描述

相关TAG标签
上一篇:调用微信公众平台的分享接口,自己分享的只有自己能看见图片别人却看不见是为什么?
下一篇:十个实用的MySQL函数实例分享
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站