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”的显示策略的另一个接口两个分区场景。

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

4

1 回答 1

0

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

    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++;
        }
    }

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

于 2013-06-08T19:16:16.933 回答