2

同じプロセスの最後に必要なメソッドがありますが、そのプロセスを別の方法で実行する必要があるため、異なるパラメーターを取得できます

私の質問は、これがAPIであると仮定すると、これがそれを行うための最良の方法です

void action(String a,String b){
    functionA();
    functionB();
    functionC();
}




void action(String a){
    functionA();
    functionC();
}


void action(String a,String B,String C){
    functionA();
    functionC();
    functionD();
}

私がそれを尋ねる理由は、ご覧のとおり、私は常にfunctionA と functionCを使用していますか? Javaでそれを行うよりエレガントな方法はありますか?

4

2 に答える 2

2

オーバーロードされた関数間でコードを共有できます。オーバーロードされた関数がそれらの間でコードを共有することは非常に論理的です。

//this delegates what happens to 'a' to the lower link, passing the responsibility to it along the 'chain'
void action(String a,String b){
    action(a);
    functionB();
}
//this delegates what happens to 'a' to the lower link, passing the responsibility to it along the 'chain'
void action(String a,String B,String C){
    action(a);
    functionD();
}
//this is the lowest link in your chain of responsibility, it handles the one parameter case
void action(String a){
    functionA();
    functionC();
} 
于 2013-02-10T10:26:42.677 に答える
0

あなたの質問はあまり明確ではありませんが、Command Patternを見てください。実際には、さまざまなサブコマンドからコマンドを作成できます。

このようなもの?

public class CommandExample {

    private final Map<String, Command> availableCommands;

    CommandExample() {
        availableCommands = new HashMap<>();
        List<Command> cmds = Arrays.asList(new Command[]{new CommandA(), new CommandB(), new CommandC(), new CommandD()});
        for (Command cmd:cmds)
            availableCommands.put(cmd.getId(), cmd);
    }
    public interface Command {
        public String getId();
        public void action();
    }

    public class CommandA implements Command {
        @Override 
        public String getId() {
            return "A";
        }
        @Override
        public void action() {
            // do my action A
        }
    }
    public class CommandB implements Command {
        @Override 
        public String getId() {
            return "B";
        }
        @Override
        public void action() {
            // do my action B
        }
    }
    public class CommandC implements Command {
        @Override 
        public String getId() {
            return "B";
        }
        @Override
        public void action() {
            // do my action C
        }
    }
    public class CommandD implements Command {
        @Override 
        public String getId() {
            return "C";
        }
        @Override
        public void action() {
            // do my action D
        }
    }


    public void execute(String[] input) {
        for (String in: input) {
            availableCommands.get(in).action();
        }
    }
}
于 2013-02-10T10:31:15.350 に答える