Простой метод фабрики против фабрики: оператор переключения между фабрикой и клиентом

Я понимаю, что одним из основных преимуществ метода Factory по сравнению с Simple Factory является то, что он не нарушает принцип Open-Closed SOLID. То есть первый не требует изменения оператора switch при добавлении новых типов.

Есть одна часть, по которой я надеюсь получить разъяснения. Если бы я использовал простую фабрику, у меня была бы такая фабрика (упрощенная):

public class ObjectFactory {
    public static IObject CreateObject(ObjectTypeEnum objectType) {
        switch (objectType) {
            case TypeA:
                return ObjectA;
                break;
            case TypeB:
                return ObjectB;
                break;
            case TypeC:
                return ObjectC;
                break;
        }
    }
}

и клиент назвал бы это так:

IObject myObject = ObjectFactory.CreateObject(objectType);

Недостатком в литературе является то, что CreateObject необходимо будет модифицировать при добавлении новых типов объектов.

Но с фабричным методом, мы бы просто не перенесли эту модификацию с фабрики на клиента, например так (код клиента):

IObject myObject;
switch (objectType) {
            case TypeA:
                myObject = ObjectAFactory.CreateObject();
                break;
            case TypeB:
                myObject = ObjectBFactory.CreateObject();
                break;
            case TypeC:
                myObject = ObjectCFactory.CreateObject();
                break;
}

В этом случае клиент будет нуждаться в изменении каждый раз, когда добавляется новый тип, в отличие от предыдущего случая, когда необходимо будет изменить фабрику. Так в чем же преимущество одного над другим? Пожалуйста, не помечайте это как дубликат, я просмотрел много SO сообщений о фабриках, и ни один из них не посвящен этому конкретному различию.

Есть ли лучшее решение, которое не нарушает принцип Open / Closed на стороне клиента или фабрики?

Ответы на вопрос(1)

Ваш ответ на вопрос