完全解耦:降低代碼的限制性,是同一代碼能夠用到更多的程序中
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()方法
這就是完全解耦,通過適配器,使得更多的代碼能夠用到同一方法