如何实现策略模式?

3

我有两种类似的解析行的方法。 第一种方法:

 public IList<LasLine> GetLasLines(string section)
        {
            var lasLines = new List<LasLine>();
            bool startParse = false; // Секція знайдена і почати парсити її
            foreach(var line in _lines)
            {
                if(GetSectionName(line).Equals(section) && !startParse)
                {
                    startParse = true;
                }
                else
                {
                    if(IsCommentLine(line)) continue; 
                    if(IsBeginSection(line)) break; 
                    LasLine lasLine;
                    if(!TryParseLasLine(line, out lasLine)) continue; 
                    lasLines.Add(lasLine); 
                }
            }
            return lasLines;
        }

第二:
public IList<AsciiLogDataLine> GetAsciiLogData()
{
var asciiLogData = new List<AsciiLogDataLine>();
bool startParse = false; 
foreach(var line in _lines)
{
if(GetSectionName(line).Equals(LasSectionName.ASCIISection) && !startParse)
{
startParse = true;
}
else
{
    if(IsCommentLine(line)) continue; 
    AsciiLogDataLine asciiLogDataLine;
    if(!TryParseAsciiLogDataLine(line, out asciiLogDataLine)) continue;                         asciiLogData.Add(asciiLogDataLine);          
              }
    }
    return asciiLogData;
    }

这种模式是否可行?
1个回答

0

我认为,您可以为这些行类创建通用的合同(接口),并使用例如泛型方法。

IEnumerable<IDataLine> GetLines<T>(Func<object> parseFunction)
{
   ...
   var dataLine = parseFunction(line);
   if (dataLine == null)
   {
       continue;
   }
   ...
}

或者您可以创建IParser并将其注入到方法中

IEnumerable<IDataLine> GetLines<T>(IParser parser)
{
   ...
   if (!parser.CanParse(line))
   {
        continue;
   }
   var dataLine = parser.Parse(line);
   ...
}

最后一个示例更类似于策略模式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接