Evgenii Legotckoi
Evgenii LegotckoiSept. 17, 2018, 5:37 a.m.

Generative Design Patterns - Factory Method

Goals

  • We define an interface for creating an object, but let the subclasses decide which class to create. A factory method allows you to instantiate a class for subclasses.
  • Definition of a "virtual" constructor.
  • The new operator is harmful.

Problems

The design structure should standardize the architectural model across a range of applications, but allows individual applications to define their own objects and provide their own rules for creating objects while maintaining a consistent object creation interface.


Discussion

The factory method is to create objects as a template method to implement the object creation algorithm. The superclass defines all the default and generic behavior (using pure virtual "methods" to implement the object creation steps) and then delegates the object creation details to subclasses that are exposed to clients.

The factory method makes application design more customizable and only slightly more complex. Other design patterns require new classes, while Factory Method only requires a new operation.

People often use the Factory Method as the standard way to create objects; but this is not necessary if: the instance of the class that was created never changes, or the instantiation is created in an operation that subclasses can easily override (such as an initialization operation).

A factory method is similar to an abstract factory, but without the focus on the object family.

Factory methods are typically defined by the architecture and then implemented by the user of the framework.

Structure

The implementation of the Factory Method discussed in Gang of Four is largely the same as the implementation of the Abstract Factory. For this reason, the presentation in this article focuses on the approach that has become popular since then.

An increasingly popular definition of a factory method is a static class method that returns an object of that class's type. But unlike a constructor, the actual object it returns can be an instance of a subclass. Unlike a constructor, an existing object can be reused instead of a newly created object. Unlike a constructor, factory methods can have different and more descriptive names (for example, Color.make_RGB_color (float red, float green, float blue) and Color.make_HSB_color (float hue, float saturation, float brightness).

The client is completely separated from the implementation details of the derived classes. It is now possible to use polymorphism.

Example

A factory method defines an interface for creating objects, but allows subclasses to decide which classes to create. Injection molds show this pattern. Plastic toy manufacturers process plastic molding powder and inject the plastic into molds with desired characteristics. The class of toys (car, action figure, etc.) is determined by the shape.

Control List

  1. If you have an inheritance hierarchy that does polymorphism, consider adding the ability to create polymorphic objects by defining a static factory method in the base class.
  2. Develop arguments for the factory method. What qualities or characteristics are necessary and sufficient to identify the correct derived class to instantiate?
  3. Consider creating an internal "object pool" that allows objects to be reused instead of being created from scratch.
  4. Consider making all constructors private or protected

Rules of thumb

  • Abstract Factory classes are often implemented using Factory Methods, but they can be implemented using Prototype.
  • Factory methods are usually called in template methods.
  • Factory Method: creation through inheritance. Prototype: creation via delegation.
  • Often projects start with Factory Method (less complex, customizable, subclasses proliferate) and evolve towards Abstract Factory, Prototype, or Builder (more flexible, more complex) as the developer finds more flexibility is needed.
  • Prototype does not require subclasses, but it does require an initialization operation. Factory Method requires subclassing but does not require initialization.
  • The benefit of a Factory Method is that it may return the same instance multiple times, or it may return a subclass rather than an object of that exact type.
  • Some factory method proponents recommend that, in terms of language design (or style, for that matter), absolutely all constructors should be private or protected.
  • The new operator is considered harmful. There is a difference between requesting an object and creating it. The new operator always creates an object and cannot encapsulate object creation. The Factory Method takes advantage of this encapsulation and allows you to query for an object without being tied to the act of creation.
We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

Comments

Only authorized users can post comments.
Please, Log in or Sign up
AD

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:50points,
  • Rating points-4
m

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:80points,
  • Rating points4
m

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:20points,
  • Rating points-10
Last comments
ИМ
Игорь МаксимовNov. 22, 2024, 7:51 p.m.
Django - Tutorial 017. Customize the login page to Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiOct. 31, 2024, 9:37 p.m.
Django - Lesson 064. How to write a Python Markdown extension Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEOct. 19, 2024, 3:19 p.m.
Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовOct. 5, 2024, 2:51 p.m.
Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5July 5, 2024, 6:02 p.m.
QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Now discuss on the forum
Evgenii Legotckoi
Evgenii LegotckoiJune 24, 2024, 10:11 p.m.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Nov. 15, 2024, 2:04 p.m.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProjectJune 4, 2022, 10:49 a.m.
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9AnonimOct. 25, 2024, 4:10 p.m.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Follow us in social networks