問題描述: 我希望能夠將方法列表傳遞給只有一個類定義方法的其他類。如果方法(其中一些具有輸入參數和非無效返回類型)在一個類中定義,我希望能夠將其中一些列表(可能具有重複)作爲其他類的構造函數的參數傳遞給它們。數組方法:適配器模式?
代碼描述: 下面的代碼是一個粗例如,如果它從主目標減損可以忽略。另一個例子,除了下面的例子之外,其中的方法是int Add(int n1,int n2),int Subtract(int n1,int n2),Multiply等等。 int MathOperation(int n1,int n2)。
嘗試解決問題: 適配器模式似乎有我需要的功能,但我只看到示例,其中在接口中的方法沒有輸入或輸出參數。我爲這個問題編寫的一個示例實現在下面發佈。
問題比喻: 你有一個隨機圖片發生器的網絡服務。有30個突變可以應用於圖像。客戶端連接並點擊一個「生成」按鈕,其中一些函數的隨機列表被傳遞給Web服務中的其他類,然後繼續使用它自己的數據運行這些函數,同時收集並可能重新使用返回值來生成一些變異的貓圖像。它不能顯式調用其他類中的方法,因爲該過程需要在運行時隨機完成。這就是爲什麼我傾向於生成隨機列表的方法,當點擊'生成'按鈕時按順序執行。
我希望我已經清楚。
public class SomeClass {
...
public double UseWrench(double torque, boolean clockwise) { ... }
public double UsePliers(double torque, boolean clockwise) { ... }
public double UseScrewDriver(double torque, boolean clockwise) { ... }
public boolean UseWireCutters(double torque) { ... }
interface IToolActions {
double TurnFastener(double torque, boolean clockwise);
boolean CutWire(double torque);
}
private IToolActions[] toolActions = new IToolActions[] {
new IToolActions() { public double TurnFastener(double torque, boolean clockwise) { double UseWrench(double torque, boolean clockwise); } },
new IToolActions() { public double TurnFastener(double torque, boolean clockwise) { double UsePliers(double torque, boolean clockwise); } },
new IToolActions() { public double TurnFastener(double torque, boolean clockwise) { double UseScrewDriver(double torque, boolean clockwise); } },
new IToolActions() { public boolean CutWire(double torque) { boolean UseWireCutters(double torque); } },
};
}
public class Worker<T> {
public List<? extends IToolActions> toolActions;
public Worker(List<? extends IToolActions> initialToolSet){
toolActions = initialToolActions;
}
}
我想我明白你的意思,但我需要更好的問題描述或更好的例子。保留似乎是方法參數和返回值。您將不得不定義一些方法來處理這些問題,並且您的特定要求將決定如何工作。沒有通用的「X」總能解決這類問題。也許可以解釋你自己選擇參數有什麼問題,這可能是一個開始。 – markspace
如何使用'List'? –
2015-05-04 06:08:25
如果您希望它快速且動態,您可以使用反射並僅列出該類中的所有方法,獲取它們的參數並將它們填充到一個循環中。但是,這不會像下面的好界面那樣乾淨 – Falco