适配器模式实现利用Scanner来扫描实现了Readable接口的对象

本文介绍了如何通过适配器模式实现一个ScannerAdapter类,使其能够与Scanner类配合工作,进而操作Scanner无法直接作用的对象。通过适配器模式,将Scanner对象与待操作的ScannerObject类进行适配,使得Scanner能够读取并处理对象中的数据。

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

显然这里的适配器是用来适配 ScannerObject的...因为这个类并没有实现 Readable接口 所以  Scanner也就无法作用于他 。。。

我们从ScannerObject派生了一个ScannerAdapter并且实现了 Readable接口  。实现了Readable的read方法。。 

Scanner之所以能从对象读取数据 ,我们观察Scanner的源码发现  其实这个类中 存在一个CharBufer的成员,buf  ,在nextXXX等方法触发的时候

会调用Read并将 CharBuffer成员传递进去 .....然后 next等方法再根据内部的定义 从CharBuffer中读取我们想要的数据

...

import java.io.IOException;
import java.nio.CharBuffer;
import java.util.Random;
import java.util.Scanner;
class  ScannerObject   //利用Scanner类+适配器模式实现利用Scanner操作对象

 private char []charLow="abcdefghijklmnopqrstuvwxyz".toCharArray() ;
 private char []charUP="abcdefghijklmnopqrstuvwxyz".toUpperCase().toCharArray();  
 private int count ;
 private Random r=new Random(67) ;
 public ScannerObject(int count){
  this.count=count ;
 }
 public int getCount(){
  return this.count ;
 }
 public String nextString()
 { 
  StringBuffer buf=new StringBuffer() ;
  for(int i=0;i<10;i++){
   buf.append(charLow[r.nextInt(26)] ) ;
   buf.append(charUP[r.nextInt(26)])  ;
   }
  return buf.toString();
 }
 
}
class  ScannerAdapter extends ScannerObject implements Readable{
  
 
 public ScannerAdapter(int count) {
  super(count);   //因为基类没有默认构造器所以必须添加
 }
 @Override
 public int read(CharBuffer cb) throws IOException  //Scanner会调用传递这个方法    CharBuffer是Scanner类的内部成员buf 有Scanner传递进去
 { 
  String str="" ;
  for(int i=0;i<getCount();i++){
   str+=nextString() ;
  }
  str+=' ' ;  //Scanner的next在遇到空字符或者 '\n'的时候结束扫描
  cb.put(str);
  return str.length();
 } 
}
public class ReadObject   {
 public static void main(String[]agrs){
  System.out.println(new Scanner(new ScannerAdapter(3)).next());
 }

}

 

转载于:https://www.cnblogs.com/yuedongwei/archive/2012/06/15/4145461.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值