Python-Basis - Fabrik und Erbauer Modus

kurze Einführung

Factory-Muster und die Erbauer gehören in den erstellten Schema.

In der Fabrik-Modus in einem Fall, wo der Kunde nicht weiß, um die Quelle des Objekts (das heißt nicht wissen, was der Objekttyp erzeugt wird) und benötigt ein Objekt zu erstellen.

Factory-Muster Idee ist, um Objekterstellungsprozess zu vereinfachen.

Factory-Muster kommt in der Regel in zwei Formen:

  • Fabrik-Verfahren, das ein Verfahren ist, (oder authentischer Python Begriffe, ist eine Funktion) und gibt das Objekt für verschiedene Eingabeparameter.
  • Abstrakte Fabrik, es ist eine Reihe von Factory-Methoden für eine Reihe verwandter Objekte zu schaffen.

Wenn die Notwendigkeit komplexer Objekte zu bauen, können Sie die Erbauer verwenden.

Der Unterschied zwischen Bauherr und Engineering-Modus:

Factory-Muster Objekte in einem einzigen Schritt zu erstellen, und die Erbauer Objekte in mehreren Schritten zu erstellen, und fast immer die Kommandanten verwenden.

Das Muster besteht typischerweise Builder aus zwei Teilen:

  • Builder (Builder): verantwortlich für die Erstellung komplexer Objekte aus verschiedenen Teilen der Komponente
  • Direktor (Direktor): Am Beispiel des Steuerbaugruppe Builder Build-Prozess unter Verwendung von

Factory Method

Factory-Methode basiert auf einer einzigen Funktion Griff Objekterstellung Aufgaben. Die Umsetzung der Factory-Methode, eine Parameterinformation vorbei spiegelt die Absichten zur Verfügung zu stellen, können Sie das gewünschte Objekt erstellen können.

Zum Beispiel: createProduct, brauchte nur den Namen des Produkts, um Sie das entsprechende Produkt zurückkehren

  • createProduct ( „Product1“)
  • createProduct ( "Hemd")

Zum Beispiel: Django Framework verwendet die Factory-Methode Formularfelder zu erstellen

  • forms.CharField (max_length = 100)
  • forms.DateField (required = False)

1, bei der Verwendung der Fabrikmethode

Wenn Sie feststellen, dass der Objektcode zu erzeugen, in vielen verschiedenen Orten verteilt wird, aber nicht in einer einzigen Funktion / Methode, was es schwierig macht, das Objekt in der Anwendung erstellt zu verfolgen, dann sollten Sie ein Factory-Methode Muster betrachten verwenden.

Der Factory-Methode Objekterstellungsprozess wird zentralisiert, wodurch es einfacher, das Objekt zu verfolgen.

mehr Fabrikmethoden zu schaffen, ist kein Problem, sondern auch in der Praxis in der Regel zu tun.

2 Vorteile, die Fabrik Methoden

Die Objekte mit der Verwendung von Entkopplungs erstellt hat, ändern das Engineering-Verfahren ist sehr einfach und erfordert nicht die gleiche Zeit, um den Code zu modifizieren Engineering-Ansatz zu verwenden.

Factory-Methode ein neues Objekt nur zu schaffen, wenn es unbedingt erforderlich, können Sie die Leistung und Speicherauslastung verbessern können.

3, Factory Method Fall 1: HTML-Button Factory

Es gibt verschiedene Arten von HTML-Schaltflächen: Button, Eingang, Bild

Die Entwicklung eines Factory-Methode, verschiedene Tasten Rückgabeparameter HTML-Code übergeben

# 工厂方法案例1:HTML 按钮工厂
​
class Button(object):
    html = "<button></button>"
    def get_html(self):
        return self.html
​
class Image(Button):
    html = "<img></img>"
​
class Input(Button):
    html = "<input></input>"
​
def create_button(name):
    c_name = name.capitalize()
    if c_name in ['Button', 'Image', 'Input' ]:
        return globals()[c_name]()
​
print(create_button('image').get_html())
<img></img>

4 Fall 2 Factory-Methode: das Paket in eine Klasse create_button

Das Verfahren kann mehrere Anlagen eine Klasse Einkapselung wiederverwendet werden

# 工厂方法案例2:将create_button 封装到一个类中
# 可以将其他 create 方法都放在 HTMLFactory 中
​
class  HTMLFactory:
    button_types = ['Button', 'Image', 'Input' ]
    def create_button(self, name):
        c_name = name.capitalize()
        if c_name in self.button_types:
            return globals()[c_name]()
​
print(HTMLFactory().create_button('button').get_html())
<button></button>

Abstract Factory

Abstrakte Fabrik-Entwurfsmuster ist eine verallgemeinerte Methode der Fabrik.

Pflanze ist eine Sammlung von abstrakten Fabrikverfahren, ein Verfahren, in dem jede Pflanze, die für ein anderes Objekt zu erzeugen.

1, bei der Verwendung der Factory-Methode abstrakte Fabrik

In der Regel mit einer einfachen Fabrikmethode starten.

Wenn Sie feststellen, dass Ihre Anwendung eine Menge Factory-Methode erfordert, und die Kombination dieser Methoden eine Reihe von Objekten macht Sinn zu schaffen, dann die abstrakte Fabrik verwendet werden.

2, abstraktes Werk Fall 1: Spielzeug-Fabrik

Definiert eine abstrakte Fabrik, gibt es eine Vielzahl von Factory-Methode.

Definieren Sie zwei Spielzeugfabriken, die Produktion von Automobil-Spielzeug, Plüschtiere.

# 抽象工厂案例1:玩具工厂
from abc import ABC, abstractmethod
​
​
class AbstractToy(ABC):
    @abstractmethod
    def name(self) ->str:
        pass
​
    @abstractmethod
    def price(self) -> int:
        pass
​
class AbstractFactory(ABC):
    @abstractmethod
    def create_toy(self, name) -> AbstractToy:
        pass
​
class CarToyFactory(AbstractFactory):
    types = ['BMW', 'Porsche', 'Buick']
    def create_toy(self, name):
        # 这里省略部分代码,具体实现参考工厂方法
        return "Car Toy:" + name
​
class StuffedToyFactory(AbstractFactory):
    types = ['Bear', 'Cat', 'Dog']
    def create_toy(self, name):
        return "Stuffed Toy:" + name
​
factory = CarToyFactory()
print( factory.create_toy('BMW'))
​

Auto-Spielzeug: BMW

Builder-Modus

Im Fall nicht geeignet für die Verwendung der Fabrik-Muster (Factory-Methode oder abstrakte Fabrik), verwenden wir die Erbauer-Objekte zu erstellen.

Wir wollen ein komplexes Objekt erstellen (ein Objekt aus vielen Teilen aus, und müssen unter Umständen eine bestimmte Reihenfolge folgen, die verschiedenen Schritte zu erstellen).

Erfordern unterschiedliche Formen von Objekten, und will die Entkopplungsstruktur und Darstellung des Objekts zu halten.

Wir wollen ein Objekt zu einem bestimmten Zeitpunkt schaffen, aber es zu einem späteren Zeitpunkt zuzugreifen.

### 流畅建造者示例
class Pizza:
    def __init__(self, builder):
        self.garlic = builder.garlic
        self.extra_cheese = builder.extra_cheese
    
    def __str__(self): 
        garlic = 'yes' if self.garlic else 'no'
        cheese = 'yes' if self.extra_cheese else 'no'
        info = (f'Garlic: {garlic}', f'Extra cheese: {cheese}')
        return '\n'.join(info)
    
    # 建造者模式
    class PizzaBuilder:
        def __init__(self):
            self.extra_cheese = False
            self.garlic = False
        def add_garlic(self):
            self.garlic = True
            return self
        def add_extra_cheese(self):
            self.extra_cheese = True
            return self
        def build(self):
            return Pizza(self)
​
if __name__ == '__main__':
    pizza = Pizza.PizzaBuilder().add_garlic().add_extra_cheese().build()
    print(pizza)
		```
Garlic: yes
Extra cheese: yes

Zusammenfassung

Factory-Modus zwei Formen: Factory-Methode und abstrakte Fabrik, die Priorität Fabrik implementiertes Verfahren der Verwendung

Factory-Muster Vorteile:

Die Objekte mit der Verwendung von Entkopplungs erstellt, ändern Sie die Engineering-Methode ist es sehr einfach und erfordert nicht die gleiche Zeit, um den Code zu modifizieren Engineering-Ansatz zu verwenden;

Factory-Methode ein neues Objekt nur zu schaffen, wenn es unbedingt erforderlich, können Sie die Leistung und Speicherauslastung verbessern können.

Wen-Source-Netzwerk zu Studienzwecken, wenn Verletzung Kontakt gelöscht.

Ich werde hochwertiger technischer Artikel und Lektionen werden gelernt in meiner öffentlichen Nummer [] in Python Kreisen gesammelt wie das Lernen zu erleichtern, sondern auch eine Reihe von Lernmaterialien zusammengestellt, freie Python Studenten zu lieben! Mehr lernen Austauschgruppe und weitere Kommunikationsprobleme schneller fortschreiten kann ~

Hier hat Bild einfügen Beschreibung

Veröffentlicht 38 Originalarbeiten · erntete Lob 1 · Ansichten 2173

Ich denke du magst

Origin blog.csdn.net/wulishinian/article/details/105090290
Empfohlen
Rangfolge