Thinking in Java 4th chap9笔记-接口(七)
ublic static String s = "I'm tracy mcgrady";
}
//大写字符串处理器
class NewUpcase extends StringProcessor
{
//注意这里一定要加上public,否则编译报错,因为接口的方法默认都是public的,继承过程中不能降低可访问性
@Override
public String process(Object input)
{
return ((String)input).toUpperCase();
}
}
//小写处理器
class NewDownCase extends StringProcessor
{
@Override
public String process(Object input)
{
return ((String)input).toLowerCase();
}
}
//字符串切分处理器
class NewSpliter extends StringProcessor
{
@Override
public String process(Object input)
{
//注意Arrays.toString用法
return Arrays.toString(((String)input).split(" "));
}
}
//****** 使用适配器来改变之前波形的例子 ******//
//适配器,生成了具有ProcessorInterface的对象
class FilterAdapter implements ProcessorInterface
{
//这是自己拥有的接口
Filter filter;
public FilterAdapter(Filter filter)
{
this.filter = filter;
}
//而且这个例子明显用到了代理,即全部用传入的参数filter实现所有的覆盖的方法
@Override
public String name()
{
return filter.name();
}
@Override
public Waveform process(Object input)
{
return filter.process((Waveform)input);
}
}
package com.book.chap9.Interface;
import java.io.IOException;
import java.nio.CharBuffer;
import java.util.Random;
import java.util.Scanner;
/**
*
*随机取词
*
测试使用接口的灵活性,策略设计模式
*
本例是实现了Readable接口,使之可以作用于Scanner
*
*
*Readable接口只要求实现read方法,在read内部,将输入内容添加到CharBuffer参数中
*
*
*@author landon
*@since JDK1.6
*@version 1.0 2012-5-9
*
*/
public class RandomWords implements Readable
{
public static Random random = new Random(3);
//大写字母数组
private static final char[] capitals = "ABCDEFGHIJKLMNOPQRSZUVWXYZ ".toCharArray();
//小写字母数组
private static final char[] lowers = "abcdefghijklmnopqrstuvwxyz".toCharArray();
//元音
private static final char[] vowels = "aeiou".toCharArray();
//读取的次数
private int count;
public RandomWords(int count)
{
this.count = count;
}
@Override
public int read(CharBuffer cb) throws IOException
{
if(count-- == 0)
{
return -1;//读取结束标志
}
cb.append(capitals[random.nextInt(capitals.length)]);//nextInt包括0不过不包括指定值n
for(int i = 0;i < 4;i++)
{
cb.append(lowers[random.nextInt(lowers.length)]);
cb.append(vowels[random.nextInt(vowels.length)]);
}
cb.append(" ");
return 10;//10为CharBuffer追加的字符数目
}
public static void main(Stringargs)
{
Scanner s = new Scanner(new RandomWords(10));
while(s.hasNext())
{
System.out.println(s.next());
}
}
}
package com.book.chap9.Interface;
import java.util.Random;
import static java.lang.System.out;
/**
*
*测试接口中域的初始化
*
*@author landon
*@version 1.0.0 2012-5-13 下午5:57:24
*@since JDK 1.6.0_30
*
*/
public class TestRandVals
{
public static void main(Stringargs)
{
out.println(RandVals.RANDOM_INT);
out.println(RandV