Service , поток

 
 
 
Сообщения:1
Доброго времени суток! Пишу файловый менеджер, в нём есть поток, который выполняет несколько функций, а именно копирует, удаляет, перемещает, создаёт файлы. При нажатии на определенную кнопку создаётся поток выполняет необходимое действие и завершается. В чём собственно вопрос? Вопрос вот в чём. Я создал класс ActionService и унаследовался от Sevice<Void>, переопределил метод call, но вот в чём проблема в одном этом методе надо описать вызов 4 различных функций. Я ничего иного как switch не придумал. В итоге я беру String переменную и проверяю её если она equals("Copy") то выполняется блок кода с копированием ну и так далее. Как возможно это сделать более грамотно? Мне не нравится такой подход. Ну и создание довольно странно выглядит ActionService myService = new ActionService(File source,File dest,"Copy");
 
 
Сообщения:2
Я бы посмотрел в сторону паттерна "Команда".
К примеру, в простейшем случае, это будет примерно так:

Ты создаешь интерфейс IOperation:
public interface IOperation{
    void execute();
}


Затем реализуешь его для каждой твоей операции, например, класс для операции копирования:
public class CopyOperation implements IOperation{

    private File source;
    private File destination;

    public CopyOperation(File source, File destination){
        this.source = source;
        this.destination = destination;
    }

    @Override
    public void execute(){
        // Здесь ты описываешь операцию копирования
    }

}


Конструктор и метод call твоего ActionService будут выглядеть так:
public class ActionService ... {

    private IOperation operation;

    public ActionService(IOperation operation){
        ...
        this.operation = operation;
    }

    @Override
    public void call(){
        operation.execute();
    }
}


И соответственно, для того, чтобы твой поток выполнял необходимое действие без всяких switch-case, ты просто передаешь необходимый объект операции:
ActionService myService = new ActionService(new CopyOperation(source, dest));
Изменен:18 сен 2018 08:00
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет