这是一个简单的例子,我想先揭示问题。优雅的数字 - >字母学术成绩映射
考虑你有一堆数字,范围从0到10,并且你想把它们映射到字母等级(A,B,C,D,F)。
可以编写一个if
语句序列,测试相应字母范围内的给定数字并返回正确的字母。
问题是:什么模式可以用来使这个更强大,也许更多的解耦?例如,如果我有10个数字范围而不是5个数字范围,那么我将不得不编辑这个单一方法来添加其他5个个案。我也不能保证我的范围是排他性的,尽管它们应该属于这种情况。
我可以想象在这里使用的排序的Dictionary<Range<int>, string>>
,但它仍然不足以提供我正在寻找的所有保证。也许人们可以用多态性来以更简洁和可扩展的方式对这个概念进行建模?
我很抱歉这个简单的例子,但我相信这可以作为一种通用的范围映射策略适用于其他更复杂的算法。
非常好,正是我希望看到的那种答案。不幸的是,这不是一个计算关系,因为我特别提到了问题中的学术成绩。你能否在这里设计一个使用责任链模式的简单例子? – julealgon
@julealgon更新回答 – dkatzel
我刚刚注意到你在OP上的编辑,对此抱歉。另外,我认为你的'IGradeMapper'应该使用'int'而不是'Range'。这里的意图是将单个数字映射到等级,因为例如A的范围是9-> 10。我想知道在这种情况下会有什么更好的效果:我可以在构造函数中创建多个传递区间和相应字母的映射器,或者创建一些具有硬编码内部区间和范围的具体类型。 –
julealgon