我有一個抽象類A和它的幾個實現。我期望通過添加更多的實現來隨着時間的推移而發展。哪種設計模式允許基於運行時類型的功能抽象?
我也有一個接口,在上面的類層次結構的實例(例如打印它們)做一些事情。
我希望接口的實現爲A的某些子類提供一些特殊功能,併爲其餘的子類提供默認功能。
我希望這個例子闡明事情:
abstract class A { }
class B extends A { }
class C extends A { }
interface Processor {
public void process(A a);
}
class SimpleProcessor implements Processor {
//I want this to be called when argument is instance of A or C or any
//new class that will be added in the future
public void process(A a) {
//Line 14
System.out.println("Default processing");
}
//I want this to be called when argument is instance of B
public void process(B b) {
System.out.println("Special processing");
}
}
public class Runner {
public static void main(String[] args) {
B b = new B();
Processor p = new SimpleProcessor();
p.process(b);
}
}
的示例打印 「默認處理」。問題是要執行的方法是根據接口方法的編譯時類型來選擇的。有沒有一種方法(或設計模式),使這個程序打印「特別處理」,而不在第14行加入
if (a instance of B)
process((B) a);
列表爲每一個需要特別處理類?
我看了一下visitor模式,但它看起來沒有什麼改進,因爲我不想用A的每個子類的方法「污染」處理器接口,因爲會添加更多的A子類。
換一種方式,我想接口的實現:
- 提供的
- 具體子類的方法的自定義實現提供了將在被添加類的默認實現未來
- 避免列出所有的類在一個大的if-then-else的列表
謝謝!
你正在尋找的模式被稱爲「可覆蓋的方法」... – 2010-07-14 10:58:11
策略模式? – 2010-07-14 13:27:37
謝謝大家的回覆。我最終使用了if-then-else語句測試的例子列表。 – idrosid 2010-07-15 08:00:57