Factory Pattern в C ++ - делаем это правильно?

Я относительно новичок в "шаблонах проектирования", как они называются в формальном смысле. Я не очень долго был профессионалом, так что я новичок в этом.

Мы ' У нас есть чистый базовый класс виртуального интерфейса. Этот интерфейсный класс, очевидно, должен предоставить определение того, какие функции должны выполнять его производные дочерние элементы. Текущее использование и ситуация в программном обеспечении диктует, какой тип производного дочернего элемента мы хотим использовать, поэтому я рекомендовал создать оболочку, которая будет сообщать, какой тип производного дочернего элемента нам нужен, и возвращать базовый указатель, указывающий на новый производный объект. Эта оболочка, насколько я понимаю, является фабрикой.

Ну, мой коллега создал статическую функцию в базовом классе, чтобы действовать как фабрика. Это вызывает у меня проблемы по двум причинам. Во-первых, это нарушает интерфейсную природу базового класса. Мне кажется неправильным, что интерфейс сам должен знать дочерние элементы, полученные от него.

Во-вторых, это вызывает больше проблем, когда я пытаюсь повторно использовать базовый класс в двух разных проектах Qt. В одном проекте я реализую первый (и, вероятно, единственную реальную реализацию для этого одного класса ... хотя я хочу использовать тот же метод для двух других функций, которые будут иметь несколько разных производных классов) производного класса, а второй - это фактический приложение, в котором в конечном итоге будет использоваться мой код. Мой коллега создал производный класс, который будет действовать как тестер реального приложения, пока я кодирую свою часть. Это означает, что мне нужно добавить его заголовки и файлы cpp в свой проект, и это кажется неправильным, поскольку я даже не использую его код для проекта, пока реализую свою часть (но он будет использовать мой, когда он будет завершен. ).

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

12
задан Devendra D. Chavan 14 February 2011 в 12:54
поделиться