gyári Minta

Sean Bradley
Sean Bradley

követés

ápr 9, 2019 * 4 perc olvasás

a kód fejlesztésekor az objektumokat közvetlenül metódusokban vagy osztályokban lehet példányosítani. Bár ez teljesen normális, érdemes lehet hozzáadni egy extra absztrakciót az objektum létrehozása és a projektben használt hely között.

a gyári minta segítségével hozzáadhatja ezt az extra absztrakciót. A gyári minta az egyik legkönnyebben érthető és megvalósítható minta.

egy extra absztrakció hozzáadása lehetővé teszi, hogy dinamikusan válasszon osztályokat, amelyek valamilyen logika alapján példányosíthatók.

az absztrakció előtt az osztály vagy módszer közvetlenül létrehozna egy konkrét osztályt. A gyári absztrakció hozzáadása után a konkrét osztály az aktuális osztály/metóduson kívül jön létre, most pedig egy alosztályban.

Képzeljen el egy alkalmazást házak tervezésére, és a házban alapértelmezés szerint már van egy szék a padlón. A gyári minta hozzáadásával lehetőséget adhat a felhasználónak arra, hogy különböző székeket válasszon, és hányat futásidőben. Ahelyett, hogy a széket keményen kódolnák a projektbe, amikor elindult, a felhasználónak most lehetősége van választani.

ennek az extra absztrakciónak A hozzáadása azt is jelenti, hogy az extra objektumok példányosításának komplikációi most elrejthetők az azt használó osztály vagy módszer elől.

ez az elválasztás megkönnyíti a kód olvasását és dokumentálását is.

a gyári minta valójában arról szól, hogy hozzáadunk egy extra absztrakciót az objektum létrehozása és a felhasználás helye között. Ez további lehetőségeket kínál, amelyeket a jövőben könnyebben kiterjeszthet.

  • Concrete Creator: az ügyfélalkalmazás, osztály vagy módszer, amely meghívja az alkotót (gyári módszer).
  • Termékinterfész: az a felület, amely leírja azokat az attribútumokat és módszereket, amelyekre a gyárnak szüksége lesz a végtermék/objektum létrehozásához.
  • alkotó: a gyári osztály. Kijelenti a gyári módszert, amely visszaadja a kért objektumot.
  • beton termék: a tárgy visszatért a gyárból. Az objektum megvalósítja a termék interfészét.

gyári UML Diagram

gyári minta UML Diagram

forráskód

ebben a fogalmi példában az ügyfél egy b

nevű objektumot szeretne, ahelyett, hogy közvetlenül létrehozná a b – et az ügyfélben, inkább az alkotótól (gyárból) kéri az objektumot.

a gyár megtalálja a megfelelő osztályt valamilyen logika segítségével a kérés attribútumaiból. Ezután megkéri az alosztályt, hogy példányosítsa az új objektumot, amelyet referenciaként visszaad az azt kérő ügyfélnek.

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

kimenet

python ./factory/factory_concept.py 
ConcreteProductB

gyári Minta áttekintés videó

példa használati eset

látogasson el a gyárba-tervezési minták Pythonban (sbcode.net) példa a gyári minta használatára.

egy példa használati eset egy felhasználói felület, ahol a felhasználó kiválaszthatja a menü elemek, mint például székek.

a felhasználó választási lehetőséget kapott valamilyen navigációs felület használatával, és nem ismert, hogy milyen választási lehetőséget, vagy mennyit fog tenni a felhasználó, amíg az alkalmazás ténylegesen fut, és a felhasználó elkezdi használni.

tehát, amikor a felhasználó kiválasztotta a széket, a gyár ezután vesz valamilyen tulajdonságot, amely részt vesz a kiválasztásban, például egy azonosítót, típust vagy más attribútumot, majd eldönti, hogy melyik releváns alosztályt kell példányosítani a megfelelő objektum visszaadása érdekében.

valós példa a használt gyári mintára

lásd a fenti gif-et egy nagyon grafikus példa a valós minta használatára a székobjektumok visszaadására. A bal oldali Panel székeket tartalmaz, és amikor egy széket a jobb oldali panelhez húz, felhívja a Székgyárat, hogy adja vissza széknek.

gyári Minta használati eset videó

Összegzés

  • a gyári minta egy olyan felület, amely a végső objektum létrehozását egy alosztályra halasztja.
  • a gyári minta egy másik réteg/absztrakció beillesztéséről szól az objektum példányosítása és a kódban való tényleges felhasználása között.
  • nem ismert, hogy milyen vagy hány objektumot kell létrehozni a futási időig.
  • lokalizálni szeretné az adott objektum példányosításának sajátosságait az alosztályba, hogy az ügyfélnek ne kelljen aggódnia a részletek miatt.
  • olyan külső keretrendszert szeretne létrehozni, amelyet egy alkalmazás importálhat/hivatkozhat, és elrejtheti a végső objektum/termék létrehozásának részleteit.
  • az egyedi tényező, amely meghatározza a gyári mintát, az, hogy a projekt most elhalasztja az objektumok létrehozását arra az alosztályra, amelyre a gyár delegálta.

tervezési minták Python (könyv)

néha csak azt, hogy kapcsolja ki a számítógépet, és olvasni egy könyvet. Tehát ezt a mintát, valamint az összes többi GoF mintát a Python könyvben szereplő tervezési Mintáim tárgyalják ASIN B08XLJ8Z2J