天天看點

設計模式-擴充卡

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

}

設計模式-擴充卡
設計模式-擴充卡