Factory Method Design Pattern

Dupa singleton, un alt pattern destul de des folosit in crearea obiectelor este cel denumit “factory method”. Pe scurt acesta izoleaza partea de creare si parametrizare a unui obiect intr-o metoda statica ce are rolul, initial, de a crea obiectul iar mai apoi de a-l parametriza facandu-l gata pentru a fi utilizat.

Intentia

  • Definirea unui interfete ce faciliteaza crearea unui obiect mentinand totodata deschisa posibilitatea subclaselor ce mostenesc clasa ce contine aceasta metoda sa ofere un alt fel de implementare pentru partea de creare si initializare a obiectelor definite.
  • Definirea unui constructor “virtual” (atentie constructori nu pot fi virtuali si nu vor fi niciodata virtuali)
  • Operatorul new este considerat ca fiind un operator destul de costisitor in ceea ce priveste probleme ce pot aparea in momentul crearii unui obiect, spre exemplu exceptii ce vor duce la crearea “partiala” a obiectului

Problema

Acest pattern creational este aplicabil cu preponderenta in cazul “framework-urilor”. Un framework (librarie) trebuie sa standardizeze modelul arhitectural pentru o gama vasta de aplicatii, dar totodata trebuie sa ofere posibilitatea aplicatiilor sa ofere domeniul lor propriu de obiecte impreuna cu implementarea specifica.

Discutie

Acest pattern este dedicat crearii obiectelor la fel cum Template Method este dedicat implementarii particulare a algoritmilor. O superclasa specifica functionalitatea standard si particularitatile (folosind metode “pur virtuale” ce definesc pasii necesari in crearea obiectelor. Aceasta delega responsabilitatea crearii obiectelor subclaselor ce vor oferi implementari metodelor virtuale.

Factory Method pattern ofera multa flexibilitatea in ceea ce priveste designul aplicatiilor. Alte patternuri creationale necesita definirea de noi clase in timp ce acest pattern necesita definirea doar operatiilor necesare.

Multi programatori folosesc adesea Factory Method ca si metoda standard de creare a obiectelor; dar nu tot timpul aplicarea acestui pattern este necesara, spre exemplu: clasa care este intantiata nu se schimba niciodata, sau operatiile care au loc pentru parametrizarea unui obiect sunt atat de simple incat pot fi grupate in intr-o singura ce poate fi suprascrisa.

Metodele definite de acest pattern sunt adesea specificate de un framework arhitectural iar mai apoi implementate de catre programatorul ce utilizeaza acel framwork in crearea aplicatiei.

Structura

Implementarea patternului adesea este confundata cu cea a petternului Abstract Factory.

Factory_Method-2x

O definitie populara a factory method este: o methodata statica a acelei clase care returneaza un obiect de tipul clasei respective. Dar spre deosebire de un constructor, obiectul returnat poate fi o instanta a unui subclase. O alta diferenta/avantaj ce il prezinta aceasta metoda este ca un astfel de obiect new trebuie recreat tot timpul ce poate fi reutilizat. O astfel de metoda poate purta un nume particular si sugestiv  (e.g.Color.make_RGB_color(float red, float green, float blue) sau Color.make_HSB_color(float hue, float saturation, float brightness).

Factory_Method_1-2x

Clientul este complet decuplat de detaliile de implementare ale clasei derivate. Crearea polymorfica este de asemenea posibila.

Factory_Method__-2x

 

Pasi necesari in crearea/definirea unui factory method

  1. Daca ai o ierarhie de clase ce foloseste excesiv polimorfismul se poate lua in considerare crearea unei metode statice in clasa de baza ce sa exerseze aceste capabilitati polimorfice.
  2. O eventuala abordare ce poti sa o iei in cosiderare este crearea unui “object pool” care sa permita reutilizarea obiectelor in detrimentul crearii altora noi de la 0.
  3. Poti lua in considerare si crearea tuturor constructorilor private sau protected.

no responses for Factory Method Design Pattern

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    This site uses Akismet to reduce spam. Learn how your comment data is processed.