0
我的問題發送數據到另一個模塊式安全
什麼樣的設計可以讓我有選擇地兩個模塊之間傳遞數據,而不缺乏類型安全的?這樣的事情可能嗎?
說明
我已經從派生的類2個模塊
abstract class Module {
public abstract void init(App app);
public abstract void exit(App app);
public abstract void process(App app);
public abstract void paint(Graphics g);
}
App類跟蹤哪些模塊是當前模塊,並允許該模塊處理執行:
class App {
private Map<Class<? extends Module>, Module> allModules = ...;
private Module currentModule;
//things to be used in modules
private Canvas canvas;
protected void start() {
allModules.put(FirstModule.class, new FirstModule());
//...
currentModule = ...;
currentModule.init(this);
}
protected void process() {
currentModule.process(this);
}
protected void paint(Graphics g) {
currentModule.paint(g);
}
public void switchModule(Class<? extends Module> module) {
//perform validation
Module next = allModules.get(module);
currentModule.exit(this);
currentModule = next;
next.init(this);
}
//expose items that modules will use
public Canvas getCanvas() {
return canvas;
}
}
現在,第一個模塊負責收集用戶指定的「設置」;他們將顯示覆選框選擇,然後點擊一個按鈕,用於存儲信息有關該複選框被選中:
class First extends Module {
private boolean firstBoxChecked, secondBoxChecked, thirdBoxChecked;
public void init(App app) {
canvas.addMouseListener(...);
}
public void process(App app) {
if(buttonClicked) {
app.switchModule(Second.class);
//pass data to next module
}
}
}
因此,在一個模塊的執行過程中的某個時刻,它會切換當前模塊。有些時候我想在當前模塊和我切換到的模塊之間傳遞數據(從第一個到第二個)。
我嘗試
唯一的「高效」的辦法,我能想到的是複製Android的交換活動設計(使用類似物體的Intent):
ModuleSwitchAction action = new ModuleSwitchAction(Second.class);
action.put("firstBoxChecked", "true");
//...
app.switchModule(action);
的人在其他類需要知道確切的鍵名,如果他們搞砸了,在編譯時沒有任何警告。有沒有更安全的方法來做到這一點?
看起來像你想訪問超類型接口的子類型實現差異。我不確定如果您不使用地圖,您就可以做到這一點。但是,您可以使用枚舉類型實現映射鍵,至少提供一些編譯時類型安全性。 – jrahhali