Factory

Posted by anghelvalentin on September 18, 2019

Factory este un design pattern creational, precum Singleton si Builder. Acest design pattern il folosim de obicei in momentul in care avem o categorie de obiecte si vrem o clasa separata care sa se ocupe de crearea lor.

Dupa Singleton, Factory este unul dintre cele mai folosite. De asemenea, exista mai multe variatiuni al acestui design pattern: simple factory, factory method si abstract factory. Toate 3 sunt folosite, si nu sunt ca Singleton, unde Simple Singleton are probleme intr-o aplicatie multithreading.
Astazi iti voi prezenta simple factory si abstract factory, iar pentru factory method te las pe tine sa cauti implemenetarea.

Simple factory

Dupa cum bine spune si numele, acaesta este cea mai simpla varianta

Trebuie sa ai o interfata ce este implementata de mai multe clase si deja stii ca poti sa faci un factory. Adica o clasa care se ocupa de crearea obiectelor. In cazul de mai sus, ShapeFactory are o metoda ce returneaza un shape, si primeste un parametru care specifica ce tip de shape sa returneze.

Abstract factory

Presupune utilizarea a mai multor factory-uri. Acest pattern il folosim cand avem mai multe obiecte complexe. Vom avea doua factory-uri: unul construieste shape-uri normale, in timp ce celalalt construieste shape-uri cu colturi rotunde.

Clasa FactoryProducer este clasa ce ne va returna factory-ul pe care il vrem noi: normal sau rounded. Un exemplu ar fi o aplicatie precum Photoshop sau Gimp: vrei sa faci un shape, dar intai trebuie sa alegi de care tip vrei normal sau rotunde. In momentul selectarii, se construieste factory corespunzator, iar obiectele ce vor fi create de acel factory vor fi din acel tip.

Practic acest design pattern implica doua sau mai multe factory, fiind folositor in momentul in care avem o ierarhie de obiecte.

Codul sursa