Fabrikk Mønster

Sean Bradley
Sean Bradley

Følg

Apr 9, 2019 * 4 min lese

når du utvikler kode, kan du instantiere objekter direkte i metoder eller i klasser. Selv om dette er ganske normalt, vil du kanskje legge til en ekstra abstraksjon mellom opprettelsen av objektet og hvor den brukes i prosjektet.

Du kan bruke Fabrikkmønsteret til å legge til den ekstra abstraksjonen. Fabrikkmønsteret er et av de enkleste mønstrene å forstå og implementere.

Å Legge til en ekstra abstraksjon vil også tillate deg å dynamisk velge klasser for å instantiere basert på en slags logikk.

før abstraksjonen vil klassen eller metoden direkte skape en konkret klasse. Etter å ha lagt til fabrikkabstraksjonen, er betongklassen nå opprettet utenfor gjeldende klasse / metode,og nå i en underklasse.

Tenk deg en søknad om å designe hus og huset har en stol allerede lagt på gulvet som standard. Ved å legge til fabrikkmønsteret, kan du gi brukeren muligheten til å velge forskjellige stoler, og hvor mange ved kjøretid. I stedet for stolen blir hardkodet inn i prosjektet da det startet, har brukeren nå muligheten til å velge.

Å Legge til denne ekstra abstraksjonen betyr også at komplikasjonene ved å starte ekstra objekter nå kan skjules fra klassen eller metoden som bruker den.

denne separasjonen gjør også koden enklere å lese og dokumentere.

Fabrikkmønsteret handler egentlig om å legge til den ekstra abstraksjonen mellom objektopprettelsen og hvor den brukes. Dette gir deg ekstra alternativer som du lettere kan utvide i fremtiden.

  • Concrete Creator: klientprogrammet, klassen eller metoden som kaller Skaperen (Fabrikkmetode).
  • Produktgrensesnitt: grensesnittet som beskriver attributter Og metoder Som Fabrikken vil kreve for å skape sluttproduktet/objektet.
  • Skaperen: Fabrikkklassen. Erklærer Fabrikkmetoden som vil returnere objektet som er forespurt fra det.
  • Betongprodukt: objektet returnert fra Fabrikken. Objektet implementerer produktgrensesnittet.

FABRIKK UML Diagram

FACTORY Pattern UML Diagram

Kildekode

i dette konsepteksemplet ønsker klienten et objekt som heter b

i Stedet for å opprette b direkte i klienten, spør den skaperen (fabrikken) for objektet i stedet.

fabrikken finner den aktuelle klassen ved hjelp av en slags logikk fra attributtene til forespørselen. Det ber deretter underklassen om å instantiere det nye objektet som det da returnerer som en referanse tilbake til klienten som ber om det.

./factory/factory_concept.py

"""
The Factory Pattern Concept
https://sbcode.net/python/factory/#factoryfactory_conceptpy
"""from abc import ABCMeta, abstractmethodclass IProduct(metaclass=ABCMeta):
"A Hypothetical Class Interface (Product)" @staticmethod
@abstractmethod
def create_object():
"An abstract interface method"class ConcreteProductA(IProduct):
"A Concrete Class that implements the IProduct interface" def __init__(self):
self.name = "ConcreteProductA" def create_object(self):
return selfclass ConcreteProductB(IProduct):
"A Concrete Class that implements the IProduct interface" def __init__(self):
self.name = "ConcreteProductB" def create_object(self):
return selfclass ConcreteProductC(IProduct):
"A Concrete Class that implements the IProduct interface" def __init__(self):
self.name = "ConcreteProductC" def create_object(self):
return selfclass Creator:
"The Factory Class" @staticmethod
def create_object(some_property):
"A static method to get a concrete product"
if some_property == 'a':
return ConcreteProductA()
if some_property == 'b':
return ConcreteProductB()
if some_property == 'c':
return ConcreteProductC()
return None# The Client
PRODUCT = Creator().create_object('b')
print(PRODUCT.name)

Utgang

python ./factory/factory_concept.py 
ConcreteProductB

Oversikt Over Fabrikkmønster

Eksempel På Bruk

Besøk Fabrikkdesign Mønstre I Python (sbcode.net) for et eksempel bruk tilfelle Av Fabrikken mønster.

et eksempel på brukstilfelle er et brukergrensesnitt der brukeren kan velge fra en meny med elementer, for eksempel stoler.

brukeren har fått et valg ved hjelp av en slags navigasjonsgrensesnitt, og det er ukjent hvilket valg, eller hvor mange brukeren vil gjøre før programmet faktisk kjører og brukeren begynner å bruke det.

så når brukeren valgte stolen, tar fabrikken deretter en egenskap involvert i det valget, for eksempel EN ID, En type eller et annet attributt, og bestemmer deretter hvilken relevant underklasse som skal startes for å returnere det aktuelle objektet.

Ekte verdenseksempel på Fabrikkmønsteret som brukes

Se gifen ovenfor for et veldig grafisk eksempel på et ekte verdenseksempel på å bruke fabrikkmønsteret til å returnere stolobjekter. Panelet til venstre inneholder stoler, og når du drar og slipper en stol til panelet til høyre, kaller Den Stolen Fabrikken for å returnere den en stol.

Fabrikk Mønster Bruk-case Video

Sammendrag

  • Fabrikkmønsteret er Et Grensesnitt som utsetter opprettelsen av det endelige objektet til en underklasse.
  • Fabrikkmønsteret handler om å sette inn et annet lag / abstraksjon mellom å instantiere et objekt og hvor i koden den faktisk brukes.
  • det er ukjent hva eller hvor mange objekter må opprettes før kjøretid.
  • du vil lokalisere kunnskap om detaljene for å instantiere et bestemt objekt til underklassen, slik at klienten ikke trenger å være bekymret for detaljene.
  • du vil opprette et eksternt rammeverk, som et program kan importere/referere til, og skjule detaljene i detaljene som er involvert i å skape det endelige objektet/produktet.
  • den unike faktoren som definerer Fabrikkmønsteret, er at prosjektet nå utsetter opprettelsen av objekter til underklassen som fabrikken hadde delegert den til.

Designmønstre I Python (Bok)

Noen ganger vil du bare sla datamaskinen og lese fra en bok. Så, dette mønsteret, pluss alle Andre GoF mønstre er omtalt i Min Design Mønstre I Python bok ASIN B08XLJ8Z2J