摘自 java编程思想 177p
需求:
现有处理器类Processor.滤波器类型Waveform,filter,两者的接口方法类似,名字相同,返回值不同.
因为Apply.process方法和Processor耦合过紧,滤波器无法复用.
适配器:维护一个已有的接口(在本例中为Fliter接口),为了能够服用Apply.process方法,需要适配器实现(implements)目标接口.
解决方法:将Processor抽象成一个接口,使其解耦,为适配器作铺垫,适配器Adapter实现Processor后即可复用Apply.process方法.
创建的时候传入一个Filter,通过这个Filter生产返回值.
public class Processor{
public String name(){ return getClass.getSimpleName(); } //返回类的名字; 子类直接继承
Object process(Object input){ return input;}
}
class Upcase extends Processor{
String process(Object input){ return ((String)input).toUpperCase();} // 子类重写父类方法返回值必须一样或为父类(Object)的子类(String).
}
class Downcase extends Processor{
String process(Object input){ return ((String)input).toLowerCase();}
}
class Apply{
public static void process(Processor p,Object){
print(“now use”+p.name());
print(p.process());
}
public static String s=“asfafsadgasdg sa sdag sad”;
main {
process(new Upcase(),s);
process(new Downcase(),s);
}
}
Apply.process方法 可以接收任何类型的Processor; 像这样根据传入的类型不同有不同行为的方法被称为"策略设计模式".
如有一滤波器类型 Waveform
public class Waveform{ //Waveform相当于 Processor里的s,被处理的对象
private static long counter;
private final long id=counter++;
public String toString(){return “Waveform”+id;}
}