Подскажите что это за паттерн проектирования?

Есть код, не могу понять что это за паттерн, похоже на реализацию итератора, подскажите плиз

class MainApp
{
    static void Main()
    {
        Class1[] cr = new Class1[2];

        cr[0] = new Class2();
        cr[1] = new Class3();

        foreach (Class1 c in cr)
        {
            Class4 pr = c.Method();
            Console.WriteLine("Created {0}", pr.GetType().Name);

        }
        Console.ReadKey();
    }

    abstract class Class4 { }
    class Class5 : Class4 { }
    class Class6 : Class4 { }
    abstract class Class1 { public abstract Class4 Method(); }

    class Class2 : Class1
    {
        public override Class4 Method()
        {
            return new Class5();
        }
    }
    class Class3 : Class1
    {
        public override Class4 Method()
        {
            return new Class6();
        }
    }
}

Ответы (1 шт):

Автор решения: aepot

Это не код, а шифр какой-то, все названия классов - обфускат. Нет, это не итератор, это фабрика.

Если этот код переписать нормально, получится что-то такое

abstract class ItemBase { }
class ItemFirst : ItemBase { }
class ItemSecond : ItemBase { }

abstract class FactoryBase
{ 
    public abstract ItemBase CreateItem(); 
}

class ItemFirstFactory : FactoryBase
{
    public override ItemBase CreateItem()
    {
        return new ItemFirst();
    }
}
class ItemSecondFactory : FactoryBase
{
    public override ItemBase CreateItem()
    {
        return new ItemSecond();
    }
}
static void Main(string[] args)
{
    FactoryBase[] factories = new FactoryBase[2];

    factories[0] = new ItemFirstFactory();
    factories[1] = new ItemSecondFactory();

    foreach (FactoryBase factory in factories)
    {
        ItemBase item = factory.CreateItem();
        Console.WriteLine("Created {0}", item.GetType().Name);
    }
    Console.ReadKey();
}

Вывод в консоль

Created ItemFirst
Created ItemSecond

Для реализации фабрик использовался шаблон "Фабричный метод".

→ Ссылка