Tehdaskuvio

Sean Bradley
Sean Bradley

Follow

huhti 9, 2019 * 4 min Lue

koodia kehitettäessä voi instantioida objekteja suoraan menetelmiin tai luokkiin. Vaikka tämä on aivan normaalia, haluat ehkä lisätä ylimääräisen abstraktion kohteen luomisen ja sen välillä, missä sitä käytetään projektissasi.

voit käyttää Tehdaskuviota lisätäksesi tuon ylimääräisen abstraktion. Tehdaskuvio on yksi helpoimmista kuvioista ymmärtää ja toteuttaa.

ylimääräisen abstraktion lisääminen mahdollistaa myös dynaamisesti valittavien luokkien valitsemisen jonkinlaisen logiikan pohjalta.

ennen abstraktiota oma luokka tai menetelmä loisi suoraan konkreettisen luokan. Tehtaiden abstraktion lisäämisen jälkeen betoniluokka on nyt luotu nykyisen luokan/menetelmän ulkopuolelle ja nyt alaluokkaan.

Kuvittele hakemus talojen suunnitteluun ja talon lattialle on oletusarvoisesti jo lisätty tuoli. Lisäämällä tehdas kuvio, voit antaa mahdollisuuden käyttäjälle valita eri tuolit, ja kuinka monta ajon aikana. Sen sijaan, että tuoli olisi koodattu projektiin sen alkaessa, käyttäjällä on nyt mahdollisuus valita.

tämän ylimääräisen abstraktion lisääminen tarkoittaa myös sitä, että ylimääräisten objektien instantioimisen komplikaatiot voidaan nyt piilottaa sitä käyttävältä luokalta tai menetelmältä.

tämä erottelu helpottaa myös koodin lukemista ja dokumentointia.

Tehdaskuviossa on oikeastaan kyse siitä, että lisätään tuo ylimääräinen abstraktio olion luomisen ja sen käyttöpaikan välille. Tämä antaa sinulle lisävaihtoehtoja, joita voit helpommin laajentaa tulevaisuudessa.

  • Concrete Creator: client application, class or method that calls the Creator (Tehdasmenetelmä).
  • Tuoteliittymä: liitäntä, joka kuvaa ominaisuuksia ja menetelmiä, joita tehdas tarvitsee lopputuotteen/ – esineen luomiseksi.
  • luoja: Tehdasluokka. Ilmoittaa Tehdasmenetelmän, joka palauttaa siltä pyydetyn esineen.
  • betonituote: esine palasi tehtaalta. Objekti toteuttaa Tuoterajapinnan.

tehtaan UML-kaavio

Tehdaskuvio UML-Diagrammi

lähdekoodi

tässä konseptiesimerkissä asiakas haluaa objektin nimeltä b

sen sijaan, että hän loisi b suoraan asiakkaalle, hän pyytää kohteen luojalta (tehdas).

tehdas löytää relevantin luokan käyttäen jonkinlaista logiikkaa pyynnön attribuuteista. Sen jälkeen se pyytää alaluokkaa asentamaan uuden objektin, jonka se sitten palauttaa referenssinä takaisin sitä pyytävälle asiakkaalle.

./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)

lähtö

python ./factory/factory_concept.py 
ConcreteProductB

Tehdaskuvion Yleiskuvavideo

esimerkki Käyttötapaus

vieraile tehtaiden Suunnittelukuvioissa Pythonissa (sbcode.net) esimerkkinä Tehdaskuvion käyttötapaus.

esimerkkitapaus on käyttöliittymä, jossa käyttäjä voi valita valikosta kohteita, kuten tuoleja.

käyttäjä on saanut valita jonkinlaisen navigointirajapinnan avulla, eikä ole tiedossa, minkä valinnan tai kuinka monta käyttäjä tekee, ennen kuin sovellus on oikeasti käynnissä ja käyttäjä alkaa käyttää sitä.

joten kun käyttäjä valitsee tuolin, tehdas ottaa jonkin kyseiseen valintaan liittyvän ominaisuuden, kuten ID: n, tyypin tai muun attribuutin ja päättää sitten, minkä alaluokan asentaa palauttaakseen sopivan esineen.

Real world example of the Factory Pattern being used

Katso yllä olevalta gif: ltä hyvin graafinen esimerkki reaalimaailman esimerkistä, jossa tehdaskuviota käytetään tuoliesineiden palauttamiseen. Vasemmalla olevassa paneelissa on tuoleja, ja kun raahaat ja pudotat tuolin oikealla olevalle paneelille, se kutsuu Tuolitehdasta palauttamaan sen tuoliksi.

Tehdaskuvion käyttö-tapausvideo

tiivistelmä

  • Tehdaskuvio on rajapinta, joka lykkää lopullisen kohteen luomisen alaluokkaan.
  • Tehdaskuviossa on kyse siitä, että lisätään toinen kerros/abstraktio objektin instantioinnin ja sen välillä, missä sitä koodissasi käytetään.
  • ei tiedetä, mitä tai kuinka monta objektia tarvitaan ennen suoritusta.
  • haluat paikallistaa tietyn objektin asentamisen yksityiskohdat alaluokkaan, jotta asiakkaan ei tarvitse olla huolissaan yksityiskohdista.
  • haluat luoda ulkoisen kehyksen, johon sovellus voi tuoda / viitata, ja piilottaa lopullisen objektin/tuotteen luomiseen liittyvät yksityiskohdat.
  • ainutkertainen tekijä, joka määrittää Tehdaskuvion, on se, että projektisi lykkää nyt esineiden luomisen sille alaluokalle, jolle tehdas oli sen siirtänyt.

Design Patterns in Python (kirja)

joskus haluaa vain sammuttaa tietokoneen ja lukea kirjasta. Niin, tämä kuvio, ynnä kaikki muut GoF-kuviot käsitellään Suunnittelukuvioissani Python-kirjassa ASIN B08XLJ8Z2J