Modelul de proiectare a metodei din fabrică în Python

Introducere

în acest articol, vom face scufundări în modelul de proiectare a metodei din fabrică, implementat în Python.

modelele de proiectare definesc soluții încercate și testate la diverse probleme recurente în dezvoltarea de software. Ele nu reprezintă un cod real, ci mai degrabă modalități prin care ne putem organiza codul pentru rezultate optime.

într-o lume cu resurse limitate, modelele de Design ne ajută să obținem cele mai multe rezultate cu cea mai mică cantitate de resurse utilizate. De asemenea, este important să rețineți că modelele de proiectare nu se aplică tuturor situațiilor și este esențial să se evalueze problema la îndemână pentru a alege cea mai bună abordare pentru scenariul respectiv.

modelele de Design sunt împărțite în câteva categorii largi, deși în principal în modele Creaționale, modele structurale și modele comportamentale.

modelul metodei din fabrică este un model de design creativ.

modelul de proiectare a metodei din fabrică

definiție

metoda din fabrică este utilizată în programarea orientată pe obiecte ca mijloc de a furniza interfețe din fabrică pentru crearea obiectelor. Aceste interfețe definesc structura generică, dar nu inițializează obiecte. Inițializarea este lăsată la subclase mai specifice.

clasa/interfața părinte găzduiește toate comportamentele standard și generice care pot fi partajate între subclase de diferite tipuri. Subclasa este la rândul ei responsabilă pentru definirea și instanțierea obiectului pe baza superclasei.

motivație

motivația principală din spatele modelului de proiectare a metodei din fabrică este de a spori cuplarea liberă în cod prin crearea unei clase abstracte care va fi utilizată pentru a crea diferite tipuri de obiecte care împărtășesc unele atribute și funcționalități comune.

acest lucru duce la creșterea flexibilității și reutilizarea codului, deoarece funcționalitatea partajată nu va fi rescrisă după ce a fost moștenită din aceeași clasă. Acest model de design este, de asemenea, cunoscut ca un Constructor Virtual.

modelul de proiectare a metodei din fabrică este utilizat în mod obișnuit în biblioteci, permițând clienților să aleagă ce subclasă sau tip de obiect să creeze printr-o clasă abstractă.

o metodă din fabrică va primi informații despre un obiect necesar, îl va instantia și va returna obiectul tipului specificat. Acest lucru oferă aplicației sau bibliotecii noastre un singur punct de interacțiune cu alte programe sau bucăți de cod, încapsulând astfel funcționalitatea noastră de creare a obiectelor.

implementarea metodei din fabrică

programul nostru va fi o bibliotecă utilizată pentru manipularea obiectelor de formă în ceea ce privește crearea și alte operațiuni, cum ar fi adăugarea de culoare și calcularea ariei formei.

utilizatorii ar trebui să poată folosi biblioteca noastră pentru a crea obiecte noi. Putem începe prin a crea forme individuale individuale și a le folosi așa cum este, dar asta ar însemna că o mulțime de logică comună va trebui rescrisă pentru fiecare formă pe care o avem la dispoziție.

primul pas pentru rezolvarea acestei repetiții ar fi crearea unei clase de formă părinte care să aibă metode precum calculate_area() și calculate_perimeter() și proprietăți precum dimensiuni.

obiectele de formă specifice vor moșteni apoi din clasa noastră de bază. Pentru a crea o formă, va trebui să identificăm ce fel de formă este necesară și să creăm subclasa pentru aceasta.

vom începe prin crearea unei clase abstracte pentru a reprezenta o formă generică:

aceasta este clasa de bază pentru toate formele noastre. Să mergem mai departe și să creăm mai multe forme concrete, mai specifice:

până în prezent, am creat o clasă abstractă și am extins-o pentru a se potrivi diferitelor forme care vor fi disponibile în biblioteca noastră. Pentru a crea diferite obiecte de formă, clienții vor trebui să cunoască numele și detaliile formelor noastre și să efectueze separat creația.

aici intră în joc metoda din fabrică.

modelul de proiectare a metodei din fabrică ne va ajuta să abstractizăm formele disponibile de la client, adică clientul nu trebuie să cunoască toate formele disponibile, ci mai degrabă să creeze doar ceea ce au nevoie în timpul rulării. De asemenea, ne va permite să centralizăm și să încapsulăm crearea obiectului.

să realizăm acest lucru prin crearea unuiShapeFactory care va fi folosit pentru a crea clasele de forme specifice bazate pe intrarea clientului:

aceasta este interfața noastră pentru creație. Nu numim Constructorii claselor de beton, sunăm fabrica și îi cerem să creeze o formă.

ShapeFactory nostru funcționează prin primirea de informații despre o formă, cum ar fi un nume și dimensiunile necesare. Metoda noastră din fabrică create_shape() va fi apoi utilizată pentru a crea și returna Obiecte Gata de formele dorite.

clientul nu trebuie să știe nimic despre crearea obiectului sau specificul. Folosind obiectul din fabrică, pot crea obiecte cu cunoștințe minime despre modul în care funcționează:

rularea acestui cod va avea ca rezultat:

sau, am putea construi o altă formă:

ceea ce merită remarcat este că, pe lângă faptul că clientul nu trebuie să știe prea multe despre procesul de creare – atunci când dorim să instanțiem un obiect, nu apelăm constructorul clasei. Solicităm fabricii să facă acest lucru pentru noi pe baza informațiilor pe care le transmitem funcției create_shape().

Pro și contra

Pro

unul dintre avantajele majore ale utilizării modelului de proiectare a metodei din fabrică este că codul nostru devine cuplat slab prin faptul că majoritatea componentelor codului nostru nu cunosc alte componente ale aceleiași baze de cod.

acest lucru are ca rezultat un cod ușor de înțeles și de testat și de adăugat mai multe funcționalități componentelor specifice fără a afecta sau rupe întregul program.

modelul de proiectare a metodei din fabrică ajută, de asemenea, să susțină principiul responsabilității unice în care clasele și obiectele care gestionează funcționalități specifice au ca rezultat un cod mai bun.

contra

crearea mai multor clase duce în cele din urmă la o mai mică lizibilitate. Dacă este combinat cu o fabrică abstractă (fabrica de fabrici), codul va deveni în curând detaliat, totuși, poate fi întreținut.

concluzie

în concluzie, modelul de proiectare a metodei din fabrică ne permite să creăm obiecte fără a specifica clasa exactă necesară pentru a crea obiectul respectiv. Acest lucru ne permite să decuplăm codul nostru și să îmbunătățim reutilizarea acestuia.

este important să rețineți că, la fel ca orice alt model de proiectare, este potrivit doar pentru situații specifice și nu pentru orice scenariu de dezvoltare. O evaluare a situației la îndemână este crucială înainte de a decide să implementați modelul de proiectare a metodei din fabrică pentru a profita de beneficiile modelului.

Lasă un răspuns

Adresa ta de email nu va fi publicată.