public interface Processor {
String name();
Object process(Object input);
}
public class Waveform {
public static long counter;
public static final long id = counter++;
public String toString (){
return "Waveform" +id;
}
}
public class Filter {
public String name (){
return getClass().getSimpleName();
}
public Waveform process (Waveform input){
return input;
}
}
public class HighPass extends Filter {
double cutoff;
public HighPass (double cutoff){
this .cutoff = cutoff;
}
public Waveform process (Waveform input){
return input;
}
}
public class LowPass extends Filter {
double cutoff;
public LowPass (double cutoff){
this .cutoff = cutoff;
}
public Waveform process (Waveform input){
return input;
}
}
public class FilterAdapter implements Processor {
Filter filter;
public FilterAdapter (Filter filter) {
this .filter = filter;
}
@Override
public String name () {
return filter.name();
}
@Override
public Object process (Object input) {
return filter.process((Waveform)input);
}
}
public class Apply {
public static void process (Processor p,Object s){
System.out .println("Using Processor" +p.name());
System.out .println(p.process(s));
}
}
public class FilterProcessorInit {
public static void main (String[] args) {
Waveform w = new Waveform();
Apply.process(new FilterAdapter(new LowPass(1.0 )), w);
Apply.process(new FilterAdapter(new HighPass(1.0 )), w);
}
}