Паттерн: Фабричный метод (Factory Method)
Фрагмент: Использование шаблонов, чтобы не порождать подклассы [C++]
  1. class Creator {
  2. public :
  3. virtual Product* CreateProduct () = 0;
  4. };
  5.  
  6. template <class TheProduct>
  7. class StandardCreator: public Creator {
  8. public:
  9. virtual Product* CreateProduct();
  10. };
  11. template <class TheProduct>
  12. Product* StandardCreator<TheProduct>::CreateProduct () {
  13. return new TheProduct;
  14. }
  15.  
  16. /* С помощью данного шаблона клиент передает только класс продукта, по-
  17. рождать подклассы от Creator не требуется: */
  18. class MyProduct : public Product {
  19. public:
  20. MyProduct();
  21. //...
  22. };
  23. StandardCreator<MyProduct> myCreator;