c# – 对于以下情况,什么是好的设计模式?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 对于以下情况,什么是好的设计模式?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1933字,纯文字阅读大概需要3分钟。
内容图文
![c# – 对于以下情况,什么是好的设计模式?](/upload/InfoBanner/zyjiaocheng/787/49499d8c801e457287515528d54f5429.jpg)
我手头有不同的字符串距离度量实现(所有这些都在C#中),例如Levensthein,NeedlemanWunsch,Jaccard等.这些工作基本相同;取两个字符串作为输入并返回[0,1]范围内的相似度分数.因此,我计划使这些类实现相同的基本接口,如下所示:
public interface IStringDistanceMetric
{
//Return a similarity between 0 and 1.
double CompareSimilarity(string strA, string strB);
}
我的每个指标都将实现此方法.但是有一些指标会直接在两个字符串上运行,没有任何其他输入,并且有一些指标需要一些额外的参数(比如对一个输入字符串中的间隙给出的惩罚等).通常,我可以在构造函数阶段或在计算相似性得分之前给出这些参数.
我的问题是,一般来说,为了处理具体距离等级之间的这种差异,什么是一个好的设计实践?我的目标是,在决定使用特定类型的度量标准之后,想要使用任何距离度量的客户端代码应该忽略任何底层实现细节.最明显的方法是实现类似的东西:
IStringDistanceMetric metric;
if(metricType == Metric.NeedlemanWunsch)
{
metric = new NeedlemanWunsch(parametersNW);
}
else if(metricType == Metric.Levensthein)
{
metric = new Levensthein(parametersL);
}
.
.
.
但这对我来说并不是一个好的解决方案.我发现自己陷入了如此基本的设计问题,我感到很惊讶.任何帮助,将不胜感激.
解决方法:
我想这很大程度上取决于它的使用方式;这些参数的值是固定的还是应该在进行比较时提供?如果这些参数的可能值的数量非常少,则可以遵循.NET for StringComparers中使用的设计(由sourceof.net提供):
private static readonly StringComparer _invariantCulture = new CultureAwareComparer(CultureInfo.InvariantCulture, false);
private static readonly StringComparer _invariantCultureIgnoreCase = new CultureAwareComparer(CultureInfo.InvariantCulture, true);
private static readonly StringComparer _ordinal = new OrdinalComparer(false);
private static readonly StringComparer _ordinalIgnoreCase = new OrdinalComparer(true);
public static StringComparer InvariantCulture {
get {
return _invariantCulture;
}
}
如果您正在获取用户输入或配置设置以指定参数值,并且每次比较字符串时它们都会有所不同,那么工厂方法可能是一个合适的解决方案,在您的答案中显示“最明显的方式”.
内容总结
以上是互联网集市为您收集整理的c# – 对于以下情况,什么是好的设计模式?全部内容,希望文章能够帮你解决c# – 对于以下情况,什么是好的设计模式?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。