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

简介: 显然这里的适配器是用来适配 ScannerObject的...因为这个类并没有实现 Readable接口 所以  Scanner也就无法作用于他 。。。 我们从ScannerObject派生了一个ScannerAdapter并且实现了 Readable接口  。

显然这里的适配器是用来适配 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());
 }

}

 

目录
相关文章
|
2天前
|
Java API Windows
File 类及其方法
File 类及其方法
|
4月前
|
Java
java中FileOutputStream流中有参构造方法有无append形参的区别--超详细讲解版
java中FileOutputStream流中有参构造方法有无append形参的区别--超详细讲解版
26 0
|
8月前
|
XML 存储 安全
Java源码类 - Properties类及多种读取方式
Java源码类 - Properties类及多种读取方式
145 0
|
8月前
|
Java
File类的基本操作方法
File类的基本操作方法
38 0
|
Java 编译器
Java用相同的方法在一个类中实现两个接口哪种接口方法被覆盖?
Java用相同的方法在一个类中实现两个接口哪种接口方法被覆盖?
|
存储
编写一个应用程序,在主类Test1类中,创建两个链表List&lt;E&gt;对象,分别存储通过键盘输入的字符串内容
编写一个应用程序,在主类Test1类中,创建两个链表List&lt;E&gt;对象,分别存储通过键盘输入的字符串内容
52 0
|
算法 Java
Java常用类(4)--System类
Java常用类(4)--System类
62 0
Java常用类(4)--System类
|
分布式计算
OutputFormat接口实现类案例
OutputFormat接口实现类案例
OutputFormat接口实现类案例
|
Java
Java中File类概述和构造方法、创建功能、判断和获取功能及删除功能
File类概述和构造方法、创建功能、判断和获取功能及删除功能的简单示例
104 0
Java中File类概述和构造方法、创建功能、判断和获取功能及删除功能
|
存储 Java
java编程之IO之File类及常用方法
Error和RuntimeException这一类的异常 运行时 javac编译的时候不检测 不需要主动添加处理异常的手段 当然我们愿意的话 也可以添加 除了上述以外其他的异常都需要做检测 要求我们必须添加处理异常的手段 编译不过去 处理异常的手段 try{}catch(){}finally{} 1.try不能单独出现 后面必须跟着其他的一个结构 catch或finally都可以 2.catch可以出现很多个 要么多个catch捕获的异常没有继承关系 要么先捕获小 再捕获大 3.final
96 0