Існує два поширених способи параметризування системи класами об'єктів, які вона створює. Один шлях полягає у створенні потомків класів, які створюють об'єкти; це відповідає випадку при якому доцільно використовувати шаблон Метод Фабрики. Основним недоліком цього підходу полягає у тому, що він може вимагати створення нового дочірнього класу, просто щоб змінити клас подукта. Такі зміни можуть викликати похідні правки коду. Наприклад, коли створювач продуктів сам створений за допомогою методу фабрики, тоді ви так само повинні перевизначати його створювач.
Іншим шляхом параметризування системи лежить більше на об'єктній композиції: Визначте об'єкт, який відповідальний за знання класу об'єктів продуктів, і робить це параметром системи. Цей метод являється ключовим аспектом шаблонів Абстрактна Фабрика, Будівник, і Прототип. Усі три торкаються теми створення нового “об'єкта фабрики”, чия відповідальність полягає у створенні об'єктів продуктів. Абстрактна Фабрика має об'єкт фабрику, який продукує об'єкти декількох класів. Будівник має об'єкт фабрики, який будує приростом складні продукти, використовуючи відповідний складний протокол. Прототип має об'єкт фабрику, який будує продукт, копіюючи об'єкт-прототип. У цьому випадку, об'єкт фабрика і прототип являються одним об'єктом, через те що прототип відповідальний за повернення продукту.
Розгляньте фреймворк графічного редактора описаного у шаблоні Прототип. Існує декілька шляхів для параметризування класу GraphicTool класом продукту:
- Застосуванням шаблону Метод Фабрики, потомок класу GraphicTool буде створений для кожного потомка класу Graphic у палітрі. GraphicTool матиме операцію NewGraphic, яку перевизначить кожен потомок класу GraphicTool.
- Застосуванням шаблону Абстрактна Фабрика, існуватиме ієрархія класів GraphicFactories, одна для кожного потомка класу Graphic. Кожна фабрика створює тільки один продукт у цьому випадку: клас CircleFactory буде створювати Circles, клас LineFactory створюватиме Lines і так далі. Клас GraphicTool буде параметризований за допомогою фабрики для створення відповідного типу Graphic.
- Застосовуванням шаблону Прототип, кожен потомок класу Graphic буде реалізовувати операцію Clone і GraphicTool буде параметризованою за допомогою прототипа класу Graphic, який він створює.
Який шаблон є найкращим в даному випадку залежить від багатьох факторів. У нашому фреймворку графічного редактора шаблон Метод Фабрики спочатку являється найлегшим для використання. Легко визначити новий потомок класу GraphicTool і примірник GraphicTool створюється тільки коли визначена палітра. Основним недоліки тут являється те, що потомки GraphicTool є розповсюдженими і ні один з них не виконує багато роботи.
Абстрактна Фабрика не пропонує великого покращення через те, що вона вимагає порівняно велику ієрархію класів GraphicFactory. Абстрактна Фабрика буде кращою ніж Метод Фабрики тільки якщо вже існуватиме ієрархія класів GraphicsFactory — через те, що компілятор створює їх автоматично (так як у Smalltalk чи Objective C), або через те, що вони необхідні для іншої частини системи.
В загальному, шаблон Прототип можливо являється найкращим варіантом для фреймворку графічного редактора через те, що він вимагає тільки реалізацію операції Clone у кожному потомку класу Graphic. Це зменшує кількість класів і Clone може бути використаною для інших цілей, окрім створення примірників (наприклад, операцію меню Дублювати).
Метод Фабрики робить дизайн більш здатним до конфігурування і тільки трохи більш складним. Інші шаблони проектування вимагають нових класів, коли Метод Фабрики вимагає тільки нової операції. Люди часто використовують Метод Фабрики як стандартний шлях для створення об'єктів, але він необов'язковий коли класи, примірники яких створюються ніколи не змінюються або коли створення примірників розміщується в операції, яку потомки можу легко перевантажити, на подобі операції ініціалізації.
Дизайн, який використовує Абстрактну Фабрику, Прототип, чи Будівник являються навіть більш гнучкими ніж ті, які використовують Метод Фабрики. Але вони також більш складні. Часто, дизайн починається з використання Методу Фабрики і потім еволюціонує до інших створюючих шаблонів, так як дизайнер усвідомлює, що необхідна більша гнучкість. Знання багатьох шаблонів проектування дає вам більший вибір, коли обирається компроміс між двома критеріями.