我的計劃是有一個ControlPanelFactory
,將建立一個定製ControlPane
爲每個不同的Model
類:工廠模式和多態性
abstact class Model {
}
class ModelA extends Model {
}
class ModelB extends Model {
}
現在我的計劃是有一個創建基於不同ControlPane
實例的工廠類在Model
類與方法的重載通過:
class ControlPaneFactory {
private ControlPaneFactory() {
}
public static ControlPanel build(ModelA model) {
return new ControlPaneA(model);
}
public static ControlPanel build(ModelB model) {
return new ControlPaneB(model);
}
}
然而,這是非常有問題的,因爲調用廠區方法時,我只有一個VARI能夠類型Model
,所以我需要首先使用instanceof
,這是一個巨大的代碼。同樣apllies具有濃縮工廠方法:
public static ControlPane build(Model model) {
if (model instanceof ModelA)
return new ControlPaneA(model);
else if (model instanceof ModelB)
return new ControlPaneB(model);
else throw new IllegalArgumentException("Unsupported model");
}
我想過usign,將指定的Model
類型的模型類中的枚舉,但是這也似乎是這將違反DRY一個壞的選擇。
此外,我更希望具有Model
類別的獨立(即在一個spererate類)的ControlPane
的實例化。有沒有一種「很好」的方式來解決這個問題?
將'ControlPane'實例化到相應的'Model'類將是顯而易見的解決方案,但正如您所說,這確實增加了視圖和模型之間的耦合,這正是我想要避免的。抽象工廠肯定會矯枉過正。我只是想知道是否有一個明顯而優雅的方式可以解決這個問題,但是如果你想從'Model'中解耦ControlPanel,總會有一些東西不太典雅。 – Marv