私はビルダーを持っています:
public abstract class ScriptBuilder {
public void buildScript() {
this.commandList = Lists.newArrayList();
}
public abstract void buildSleepCommand(long time);
public abstract void buildSynchronizationCommand();
public abstract void buildTouchDownCommand(TouchPoint touchPoint);
public abstract void buildTouchUpCommand();
public List<String> getScript() {
return commandList;
}
}
実装:
public class StandardScriptBuilder extends ScriptBuilder{
…
}
新しいインターフェースを実装する新しいビルダーを構築する必要があります。この新しいインターフェースは、インターフェースScriptBuilderに基づいています。
class NewScriptBuilder extends StandardScriptBuilder{
public void buildNewCommand(TouchPoint startTouchPoint, TouchPoint endTouchPoint) {
buildTouchDownCommand(startTouchPoint);
buildSynchronizationCommand();
buildTouchDownCommand(endTouchPoint);
}
…
}
既存のビルダーインターフェイスを拡張し、ビルダーの利点を維持するパターンはありますか?つまり、インターフェイスを拡張すると、次のことはできなくなります。
ScriptBuilder builder = new NewScriptBuilder();
…
builder.buildNewCommand;
解決策がない場合は、通常使用しますか?:
((NewScriptBuilder)builder).buildNewCommand;
どうも。
つまり、たとえば、デコレータパターンを使用できます。
public abstract class Decorator extends ScriptBuilder {...} ...
public class OahDecorator extends Decorator {
...
public void buildNewCommand() {
...
}
}
それは通常のコード構成ですか、それとも別のパターンを選択しますか?タスク-ビルダーに新しいメソッドを追加します。