我想设计一个字幕单词解析器。它是这样工作的;
- 查看字幕提供商是否可用
- 获取字幕作为inputStream
- 将inputStream转换为文本行
- 将行解析为节(字幕文件包括100-110节(
- 将小节的句子解析为单词
- 将字幕、小节和单词保存到数据库
如您所见,每一步都遵循前面的步骤输出。
我应该使用哪种设计模式?
我会考虑使用状态设计模式,它类似于策略设计模式,但在其上下文中包含当前状态。
所以你会有这样的东西:
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 ...
}
}
但我不确定复杂性,也不确定是否需要考虑这个问题的设计模式。