首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我必须为动态整数集合中的每个项目显示不同的消息,那么要应用哪种设计模式和坚实的原则?

如果我必须为动态整数集合中的每个项目显示不同的消息,那么要应用哪种设计模式和坚实的原则?
EN

Stack Overflow用户
提问于 2013-06-08 12:15:18
回答 1查看 335关注 0票数 0

要求是

  1. 我想要创建一个动态的整数集合,这意味着IEnumerable集合可以有1到100或1到500或1到1000个整数。
  2. 我想在集合中进行迭代,在迭代时,我希望每次在将每个项除以3、5或7时显示不同的消息。

例如:在可枚举的1到100整数集合中,当发现3可被3整除时,3将被单词"FUZZ“替换,因此像6,9,12这样的整数将被"FUZZ”替换。

当发现5被5整除时,5将被"BUZZ“一词取代,因此10,15(可被3和5整除的)将被FUZZBIZZ取代,而20将再次被替换为"BIZZ”。

为了实现这一逻辑,我认为策略和单责任原则适用于此,因为在两种划分场景中,我可以为分区3和除以5提供抽象的界面策略,以及显示"FUZZ“和"BIZZ”的显示策略的另一个接口。

请纠正我或指导我正确的设计模式和坚实的原则,如SRP/开放封闭原则的固体。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-08 19:16:16

学校作业?我不明白为什么对给定的需求需要设计模式,因为它只需要几行代码就可以实现。设计模式可以是强大的,但只应在必要时使用。

代码语言:javascript
复制
    static void Main(string[] args)
    {
        foreach(var item in Generate(1, 1000))
        {
            Console.WriteLine("{0}: {1}", item.Key, item.Value);
        }
    }

    private static IEnumerable<KeyValuePair<int, string>> Generate(int init, int max)
    {
        int current = init;

        var stringBuilder = new StringBuilder();

        while (current <= max)
        {
            if (current % 3 == 0) stringBuilder.Append("FUZZ");
            if (current % 5 == 0) stringBuilder.Append("BIZZ");
            if (current % 7 == 0) stringBuilder.Append("????");

            yield return new KeyValuePair<int, string>(current, stringBuilder.ToString());
            stringBuilder.Clear();

            current++;
        }
    }

Sidenote:迭代器模式使用foreach实现,构建器模式使用StringBuilder实现。但两者都不是我自己实现的。

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

https://stackoverflow.com/questions/16999440

复制
相关文章

相似问题

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