如何優化LRC歌詞解析代碼中冗余的if-else語句?

如何優化LRC歌詞解析代碼中冗余的if-else語句?

告別冗余的if-else:LRC歌詞解析代碼優化策略

本文針對LRC歌詞解析代碼中大量if-else語句導致的維護困難問題,提出一種基于策略模式的優化方案。原代碼使用if-else語句逐行判斷歌詞文件內容,并解析到ChangDuan對象中,這種方式擴展性差,維護成本高。

原代碼片段如下:

private static void parselrccontent(changduan changduan, string line, map<string pattern=""> patternmap) throws parselrcexception {     if (matcher(line, patternmap, lrcconstants.lrcregenum.title.name())) {         changduan.setname(getchangduaninfocontent(line, lrcconstants.lrcregenum.title.getstartindex()));     } else if (matcher(line, patternmap, lrcconstants.lrcregenum.origin_title.name())) {         changduan.setoriginname(getchangduaninfocontent(line, lrcconstants.lrcregenum.origin_title.getstartindex()));     } else if (matcher(line, patternmap, lrcconstants.lrcregenum.jumu.name())) {         // ...  其余代碼省略 ...     } else {         throw new parselrclineexception(line);     } }

優化方案采用策略模式,將每個if-else分支抽象為獨立的解析器類。

首先,定義一個接口IMatchParser:

interface IMatchParser {     boolean match(String line, Map<String, Pattern> patternMap);     void handle(changduan changduan, String line, Map<String, Pattern> patternMap); }

然后,為每種解析規則創建一個實現IMatchParser接口的類,例如:

public class TitleParser implements IMatchParser {     @Override     public boolean match(String line, Map<String, Pattern> patternMap) {         return matcher(line, patternMap, lrcconstants.lrcregenum.title.name());     }      @Override     public void handle(changduan changduan, String line, Map<String, Pattern> patternMap) {         changduan.setname(getchangduaninfocontent(line, lrcconstants.lrcregenum.title.getstartindex()));     } }

將所有解析器添加到一個列表中:

List<IMatchParser> parserList = new ArrayList<>(); parserList.add(new TitleParser()); parserList.add(new OriginTitleParser()); // ... 添加其他解析器 ...

最后,修改parselrccontent方法:

private static void parseLrcContent(ChangDuan changDuan, String line, Map<String, Pattern> patternMap) throws ParseLrcException {     for (IMatchParser parser : parserList) {         if (parser.match(line, patternMap)) {             parser.handle(changDuan, line, patternMap);             break;         }     } }

通過策略模式,新增解析規則只需創建新的IMatchParser實現類并添加到列表中,無需修改原有代碼,顯著提高了代碼的可維護性和擴展性。 代碼更加清晰,易于理解和維護。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享