2016-08-22 8 views
-2

Может ли кто-нибудь помочь мне разобраться в следующих запросах относительно шаблона фабричных методов?завод против шаблона метода фабрики в C#

im refering this link в качестве образца.

1.Что является необходимостью абстрактного класса Factory в заводской схеме метода? Что такое , если вы используете обычный класс?

2. Указывается, что изменение кода не повлияет на клиента. Но , если был добавлен новый класс product3, в код клиента также потребуется соответствующее изменение (в соответствии с приведенным ниже кодом). Тогда в чем преимущество этого шаблона дизайна?

3.Что является преимуществом objFactories[0] = new concreteFactoryforProduct1(); над concreteFactoryforProduct1 factory = new concreteFactoryforProduct1();

Factory[] objFactories = new Factory[2]; 
    objFactories[0] = new concreteFactoryforProduct1(); 
    objFactories[1] = new concreteFactoryforProduct2(); 
    foreach (Factory objFactory in objFactories) 

    { 
      Product objProduct = objFactory.GetProduct(); 
      objProduct.GetDetails(); 
     } 

4.Почими мы не можем реализовать открытый близко принцип простого шаблона дизайна?

ответ

1

(1) В соответствии с простейшим использованием абстрактных классов добавление абстракции позволяет избежать создания экземпляров с использованием нового Factory(). (Потому что это не имеет смысла, так же, как животное и слон -> животное - только абстракция, не существует сущности, называемой животным)

(2) Это просто демо. Не будет случая использования на земле, чтобы перечислить доступные фабрики.

(3) В примере, это массив Factory, ваш вопрос не применим.

(4) Я думаю, вы спрашиваете о ситуации, не используя шаблон Factory method. Могут быть много ситуаций. Вы можете определить, пытаетесь ли вы его реализовать.

+1

1) но im создает экземпляры objFactories [0] = новый конкретныйFactoryforProduct1(); 2) им непонятно, что вы пытаетесь объяснить. 3) почему я должен использовать objFactories [0]? почему я не могу использовать экземпляр класса? в чем преимущество? –

+0

(1) Да, это нормально, вы не вызываете новый конструктор Factory() ->. Только ссылочный тип. (2) На практике, если u хочет объект, созданный Factory1, вы просто создаете экземпляр (предпочтительно Singleton) и вызываете его метод. (3) Здесь, без этого, как вы можете вставлять обе типы конкретных заводов в один и тот же массив? –

+1

Я понял вашу точку зрения. Но вы объясняете реализацию шаблона, и я прошу воспользоваться этим способом. Только в этом примере он использует массив. У вас может быть много примеров, которые прямо присваиваются фабричному абстрактному экземпляру. –