首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现策略模式?

如何实现策略模式?
EN

Stack Overflow用户
提问于 2012-05-04 20:42:23
回答 1查看 228关注 0票数 3

我有两种类似的方法来解析代码行。第一种方法

代码语言:javascript
复制
 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;
        }

第二个

代码语言:javascript
复制
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;
    }

是否有可能实现此模式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-04 21:25:49

我认为,您可以为这个Line类创建公共的Contract (接口),并使用例如泛型方法。

代码语言:javascript
复制
IEnumerable<IDataLine> GetLines<T>(Func<object> parseFunction)
{
   ...
   var dataLine = parseFunction(line);
   if (dataLine == null)
   {
       continue;
   }
   ...
}

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

代码语言:javascript
复制
IEnumerable<IDataLine> GetLines<T>(IParser parser)
{
   ...
   if (!parser.CanParse(line))
   {
        continue;
   }
   var dataLine = parser.Parse(line);
   ...
}

最后一个样本更类似于策略模式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10449013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档