I'd consider using state design pattern, which is like strategy design pattern but contains current state in its context.
So you'd have something like this:
class ProcessingData {
private State state = new CheckAvailabilityState();
//Fill with all data related to the subtitle-word parser
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
}
interface State {
void next(ProcessingData processingData);
void prev(ProcessingData processingData);
void execute();
}
class CheckAvailabilityState implements State {
@Override
public void next(ProcessingData processingData) {
processingData.setState(new FetchSubtitlesState());
}
@Override
public void prev(ProcessingData processingData) {
//this is 1st step so no prev
}
@Override
public void execute() {
//Availability check goes here ..
}
}
class FetchSubtitlesState implements State {
@Override
public void next(ProcessingData processingData) {
//ConvertState
}
@Override
public void prev(ProcessingData processingData) {
processingData.setState(new CheckAvailabilityState());
}
@Override
public void execute() {
//Fetching goes here ...
}
}
But I'm not sure about complexity or the need for design patterns considering the problem.