Thinking in Java 4th chap9笔记-接口(六)
l.kill();
}
public static void main(Stringargs)
{
DangerousMonster tracy = new DragonZilla();
u(tracy);
v(tracy);
Vampire landon = new VeryBadVampire();
u(landon);
v(landon);
w(landon);
}
}
interface Monster
{
void menace();
}
//接口继承
interface DangerousMonster extends Monster
{
void destroy();
}
interface Lethal
{
void kill();
}
//龙
class DragonZilla implements DangerousMonster
{
@Override
public void menace()
{
}
@Override
public void destroy()
{
}
}
//吸血蝙蝠,继承了一个已经继承的接口DangerousMonster
interface Vampire extends DangerousMonster,Lethal
{
void drinkBlood();
}
class VeryBadVampire implements Vampire
{
@Override
public void destroy()
{
}
@Override
public void menace()
{
}
@Override
public void kill()
{
}
@Override
public void drinkBlood()
{
}
}
package com.book.chap9.Interface;
/**
*
*在
Java SE5之前,通常使用接口来定义常量群组
*默认都是static和final的
*
*@author landon
*@version 1.0.0 2012-5-13 下午5:39:13
*@since JDK 1.6.0_30
*
*/
public interface Months
{
int JANUARY = 1;
int FEBRUARY = 2;
int MARCH = 3;
int APRIL = 4;
int MAY = 5;
int JUNE = 6;
int JULY = 7;
int AUGUST = 8;
int SEPTEMBER = 9;
int OCTORBER = 10;
int NOVEMBER = 11;
int DECEMBER = 12;
}
package com.book.chap9.Interface;
import java.util.Arrays;
/**
*
*使用接口处理耦合的情况
*
*1.复用代码的第一种方式是使客户端程序员遵循该接口来编写他们自己的类,如StringProcessor,NewUpcase,NewSpliter,因为之前的接口变成了ProcessorInterface
*2.但是你经常碰到的情况是你无法修改你想要使用的类,{@link Filter}等波形例子是被发现而并非创建的。在这些情况下,可以使用适配器模式,适配器代码将接受你所
*拥有的接口,并产生你所需要的接口。{@link FilterAdapter}
*
*{@link Apply}
*
*@author landon
*@since JDK1.6
*@version 1.0 2012-5-3
*
*/
public class NewApply
{
public static void process(ProcessorInterface processor,Object s)
{
System.out.println("Using Processor: " + processor.name());
System.out.println(processor.process(s));
}
public static void main(Stringargs)
{
//直接修改,重新使用接口编写的类
NewApply.process(new NewUpcase(), StringProcessor.s);
NewApply.process(new NewDownCase(), StringProcessor.s);
NewApply.process(new NewSpliter(), StringProcessor.s);
//使用适配器修改的类
Waveform waveform = new Waveform();
NewApply.process(new FilterAdapter(new LowPass(1.0)), waveform);
NewApply.process(new FilterAdapter(new HighPass(1.0)), waveform);
NewApply.process(new FilterAdapter(new BandPass(1.0,2.0)), waveform);
}
}
//Processor
interface ProcessorInterface
{
public String name();
Object process(Object input);
}
//抽象的字符串处理器
abstract class StringProcessor implements ProcessorInterface
{
@Override
public String name()
{
return getClass().getSimpleName();
}
//协变返回类型
@Override
public abstract String process(Object input);
p