摘自 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;}
}
