我有以下方法:如何避免方法之間的依賴關係?
protected ArrayList<String> prepInstaller(RemoteSession session) {
ArrayList<String> installCommand = new ArrayList<String>();
installer.setInstallOption(getCommand());
installer.setInstallProperties(generateInstallProperties());
installer.setTestHome(getTestHome(session));
switch (installer.getInstallOption()) {
case ("addon"):
installer.setAddOnScriptPath(getAddOnScriptPath(session, true));
installer.setAddOnImageLocation(getAddOnPath(session, true));
installCommand.add(installer.getInstallCommand());
break;
case ("install"):
installer.setImageLocation(getImageLocation(session, true));
installCommand.add(installer.getInstallCommand());
break;
case ("patch"):
case ("rollback"):
installer.setPatchLocationPath(getPatchPath(session, true));
for(String currentPatch: installer.getPatches()) {
installCommand.add(installer.getInstallCommand(currentPatch));
}
break;
}
return installCommand;
}
我的問題是,這條線:
installCommand.add(installer.getInstallCommand());
包含installer.getInstallCommand()
將包含空的對象,除非以下是運行:
installer.setInstallOption(getCommand());
installer.setInstallProperties(generateInstallProperties());
installer.setTestHome(getTestHome(session));
中其他...該方法依賴於以前的方法正在運行,這是不可取的。我已經定義installer
爲靜態工廠:
public static InstallData getInstance() {
if (instance == null) {
instance = new InstallData();
}
return instance;
}
我看過使用構建器模式,但它似乎有點笨拙。我找不到它的一個整潔的版本。我不想使用構造函數,因爲它會很麻煩,我需要其中的幾個。
我也嘗試構造一個包含所有set
方法的對象,然後將該對象傳遞給一個返回getInstallCommand()
的新類,但這樣也變得相當混亂。
想法表示歡迎:)
似乎'installer'已經是某種'Builder'了。您可以通過擁有一些有意義的整體對象來整理事情(將高度內聚的數據分組爲單個概念),但我不知道您的域足以提出這樣的分組。還有,像String命令= new InstallCommandBuilder(installOptions,installProperties,testHome).forAddon(scriptPath,imagePath).build();' – plalx
謝謝 - 這就是我最終做的 - 我使用了InstallCommandBuilder。 – eeijlar