Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 遵循前面步骤输出的顺序作业的设计模式建议_Java_Design Patterns_Sequential - Fatal编程技术网

Java 遵循前面步骤输出的顺序作业的设计模式建议

Java 遵循前面步骤输出的顺序作业的设计模式建议,java,design-patterns,sequential,Java,Design Patterns,Sequential,我想设计一个字幕字解析器。它是这样工作的 检查字幕提供商是否可用 获取字幕作为输入流 将inputStream转换为文本行 将行解析为节(一个字幕文件包括100-110节) 将章节的句子解析为单词 将字幕、章节和单词保存到数据库 正如您所看到的,每个步骤都遵循前面的步骤输出 我应该使用哪种设计模式?我会考虑使用,它类似于策略设计模式,但在其上下文中包含当前状态。 所以你会有这样的东西: class ProcessingData { private State state = new Ch

我想设计一个字幕字解析器。它是这样工作的

  • 检查字幕提供商是否可用
  • 获取字幕作为输入流
  • 将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 ...
        }
    }
    

    但考虑到这个问题,我不确定设计模式的复杂性和必要性

    我认为设计模式指的是其他东西,而不是你正在尝试做的事情。我建议您使用面向对象编程(OOP)的基础知识,因为您是在java上进行的。或者你可以编辑你的问题并解释你所引用的设计模式。实际上,我知道如何使用OOP进行设计。我不是在问面向对象的基本问题。每次我设计这样一个系统时,我都会编写一系列类,它们像链一样相互调用。因此,我无法在创建后阅读它。我不确定哪种设计模式适合我的情况。(陈述设计模式、责任链或命令模式)我在问哪一个可以使用这样的系统。“我写了一系列类,它们像链一样相互调用。所以我创建之后无法阅读它们。”。考虑创建具有实现接口的子类的类。它将最小化链接/读取的复杂性。我认为没有必要使用这样的设计模式。