Представь, что пользователь сообщает нам с помощью переменной Operation operation, что он хочет сделать. Тогда мы должны проверить значение этой переменной, создать объект соответствующего класса команды и вызвать у него метод execute(). Чтобы не создавать объект класса нужной команды каждый раз, его нужно где-то хранить. Создадим для этих целей класс CommandExecutor, пусть у него будет открытым только один публичный статический метод execute(Operation operation), который найдет нужную команду и вызовет у нее метод execute.
1. Создай класс CommandExecutor. Он должен быть в корне задачи, не стоит добавлять его в пакет command
2. Запрети явный вызов конструктора этого класса
3. Добавь в класс приватное статическое константное хранилище команд Map<Operation, Command> allKnownCommandsMap
4. Проинициализируй переменную allKnownCommandsMap так, чтобы каждому значению из Operation соответствовала правильная команда.
5. Реализуй публичный статический метод execute(Operation operation) throws Exception, который должен брать нужную команду из allKnownCommandsMap и вызывать у нее метод execute.
Догадался ты или нет, но ты только что реализовал паттерн Команда!
Требования:
1. В корне задачи должен быть создан класс CommandExecutor.
2. Запрети явный вызов конструктора CommandExecutor.
3. В классе CommandExecutor нужно создать приватное статическое константное поле Map allKnownCommandsMap.
4. Поле allKnownCommandsMap должно быть проинициализировано всеми значениями Operation и соответствующими Command-классами.
5. В классе CommandExecutor нужно реализовать метод execute(Operation operation), который будет вызывать execute у нужной команды из allKnownCommandsMap.
public class CommandExecutor {
private CommandExecutor() {
}
private static final Map <Operation, Command> allKnownCommandsMap = new HashMap<>();
static {
allKnownCommandsMap.put(Operation.ADD, new ZipAddCommand());
allKnownCommandsMap.put(Operation.CONTENT, new ZipContentCommand());
allKnownCommandsMap.put(Operation.CREATE, new ZipCreateCommand());
allKnownCommandsMap.put(Operation.EXIT, new ExitCommand());
allKnownCommandsMap.put(Operation.EXTRACT, new ZipExtractCommand());
allKnownCommandsMap.put(Operation.REMOVE, new ZipRemoveCommand());
}
public void execute(Operation operation) throws Exception{
allKnownCommandsMap.get(operation).execute();
}
}
Валидатор выдает, что:
В классе CommandExecutor нужно реализовать метод execute(Operation operation), который будет вызывать execute у нужной команды из allKnownCommandsMap. При вызове метода с аргументом Operation.CONTENT нужно взять ZipContentCommand в allKnownCommandsMap и вызвать execute.package com.javarush.task.task31.task3110;
import com.javarush.task.task31.task3110.command.ExitCommand;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* Created by Jeka on 17.09.2017.
*/
public class Archiver {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Введите путь для архивации");
Path pathTo = Paths.get(reader.readLine());
ZipFileManager zipFileManager = new ZipFileManager(pathTo);
System.out.println("Введите путь файла, который надо архивировать");
Path pathFrom = Paths.get(reader.readLine());
zipFileManager.createZip(pathFrom);
ExitCommand exitCommand = new ExitCommand();
exitCommand.execute();
}
}