完全解耦:降低代码的限制性,是同一代码能够用到更多的程序中
1 packageinterfaces.interfaceprocessor;2 import staticnet.mindview.util.Print.print;3
4 interfaceProcessor {5 String name();6 Object process(Object input);7 }8 public classApply{9 public static voidprocess(Processor p, Object s) {10 print("Using Processor "+p.name());11 print(p.process(s));12 }13 }
上述方法代码Apply.process()打印出进程的名字和进程的过程。只要符合此要求的都可以利用这个代码
1 packageinterfaces.interfaceprocessor;2 import static net.mindview.util.Print.*;3
4 public abstract class StringProcessor implementsProcessor {5 publicString name() {6 returngetClass().getSimpleName();7 }8 public abstractString process(Object input);9 public static String s = "if she weights the same as duck";10 public static voidmain(String[] args) {11 Apply.process(newUpcase(), s);12 }13 }14 class Upcase extendsStringProcessor{15 publicString process(Object input) {16 return((String)input).toUpperCase();17 }18 }
在利用Apply.process()方法时,需要一个适配器方法,本例中StringProcessor为字符串适配器,是接口Processor的实现
由于Apply.process()方法接收的参数为Proessor类型,因此必须要一个Processor接口的实现,我们把它称作适配器,该适配器也是接口Processor的实现,这样该适配器的类型也是Processor
这样就可以把该适配器的内容传到Apply.process()方法中(Apply.process(new Upacase(), s)
packageinterfaces.interfaceprocessor;classChacaterPairSwapper{publicString swap(String s) {
StringBuilder sb= newStringBuilder(s);for(int i=0; i
sb.setCharAt(i, c2);
sb.setCharAt(i+1,c1);
}returnsb.toString();
}
}class SwapAdapator implementsProcessor{
ChacaterPairSwapper cps= newChacaterPairSwapper();publicString name() {return ChacaterPairSwapper.class.getSimpleName();
}publicObject process(Object input) {returncps.swap((String)input);
}
}public classE11_Swap {public static voidmain(String[] args) {
Apply.process(new SwapAdapator(), "1234");
}
}
本例也是利用了Apply.process()方法,首先写一个交换一对字符的方法,再写了一个此方法的适配器,使其适配Apply.process()方法
这就是完全解耦,通过适配器,使得更多的代码能够用到同一方法