Tovární Vzor

Sean Bradley
Sean Bradley

Následovat

9. Dubna 2019 · 4 min číst

Při vývoji kódu, můžete vytvořit instance objektů přímo v metod nebo tříd. I když je to zcela normální, možná budete chtít přidat další abstrakci mezi vytvořením objektu a místem, kde se používá ve vašem projektu.

můžete použít tovární vzor pro přidání této další abstrakce. Tovární vzor je jedním z nejjednodušších vzorů pochopit a realizovat.

přidání další abstrakce vám také umožní dynamicky vybrat třídy, které chcete vytvořit na základě nějaké logiky.

před abstrakcí by vaše třída nebo metoda přímo vytvořila konkrétní třídu. Po přidání tovární abstrakce je třída betonu nyní vytvořena mimo aktuální třídu / metodu a nyní v podtřídě.

Představte si aplikaci pro navrhování domů a dům má ve výchozím nastavení již přidanou židli na podlaze. Přidáním továrního vzoru můžete uživateli dát možnost vybrat si různé židle a kolik za běhu. Místo toho, aby židle byla pevně zakódována do projektu, když začala, má nyní uživatel možnost si vybrat.

Přidání této další abstrakce také znamená, že komplikace konkretizaci další objekty mohou být nyní skryty z třídy nebo metoda, která používá to.

toto oddělení také usnadňuje čtení a dokumentování kódu.

tovární vzor je opravdu o přidání této další abstrakce mezi vytvořením objektu a tam, kde je použit. To vám dává další možnosti, které můžete v budoucnu snadněji rozšířit.

  • konkrétní tvůrce: klientská aplikace, třída nebo metoda, která volá tvůrce (tovární metoda).
  • rozhraní produktu: rozhraní popisující atributy a metody, které bude továrna potřebovat k vytvoření konečného produktu / objektu.
  • tvůrce: tovární třída. Deklaruje tovární metodu, která vrátí požadovaný objekt.
  • betonový výrobek: předmět vrácený ze závodu. Objekt implementuje rozhraní produktu.

Factory UML Diagram

Tovární Vzor z UML Diagramu

Zdrojový Kód

V tomto pojetí například klient chce objekt s názvem b

Spíše než vytvářet b přímo v klientovi, to žádá tvůrce (tovární) pro objekt místo.

továrna najde příslušnou třídu pomocí nějaké logiky z atributů požadavku. Poté požádá podtřídu o instanci nového objektu, který se pak vrátí jako odkaz zpět na klienta, který o něj požádá.

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

Výstup

python ./factory/factory_concept.py 
ConcreteProductB

Tovární Vzor Přehled Video

Příklad Použití Případ

Navštivte Factory — Návrhové Vzory V Pythonu (sbcode.net) příklad použití případ Továrny vzor.

příkladem použití je uživatelské rozhraní, kde si uživatel může vybrat z nabídky položek, jako jsou židle.

uživatel dostal na výběr pomocí nějakého navigačního rozhraní a není známo, jakou volbu nebo kolik uživatel provede, dokud nebude aplikace skutečně spuštěna a uživatel ji začne používat.

Takže, když uživatel vybral židli, továrna pak trvá nějaký majetek podílející se, že výběr, jako je ID, Typ nebo jiný atribut, a pak rozhodne, které příslušné podtřídy pro instanci, aby se vrátit na příslušný objekt.

Reálném světě příklad Tovární Vzor používá

Viz výše gif pro velmi grafické příklad z reálného světa příklad použití factory vzor pro návrat židle objekty. Panel vlevo obsahuje židle, a když přetáhnete židli na panel vpravo, volá továrnu na židle, aby jí vrátila židli.

Tovární Vzor, Použijte-v případě Video

Shrnutí

  • Tovární model je Rozhraní, které odkládá vytvoření finální objekt podtřídy.
  • Tovární vzor, je o vložení další vrstvy/abstrakce mezi konkretizaci objektu a, kde v kódu je ve skutečnosti používá.
  • není známo, co nebo kolik objektů bude třeba vytvořit až do runtime.
  • chcete lokalizovat znalosti specifik konkretizaci určitého objektu do podtřídy tak, že klient nemusí mít obavy o detaily.
  • chcete vytvořit externí rámce, které aplikace lze importovat/odkaz, a skrýt podrobnosti o specifika podílejí na vytváření konečného objektu/produktu.
  • unikátní faktorem, který definuje Tovární vzor, je, že se váš projekt nyní odkládá vytváření objektů podtřídy, že továrna měla v přenesené pravomoci.

návrhové vzory v Pythonu (kniha)

někdy stačí vypnout počítač a číst z knihy. Takže tento vzor a všechny ostatní vzory GoF jsou popsány v mých návrhových vzorech v pythonové knize ASIN B08XLJ8Z2J