Hallo Freunde! Mit Ihnen setzen Alex und ich unsere Artikelserie über die Verwendung von Designmustern in der Sprache Golang fort .
Es ist interessant, Feedback von Ihnen zu erhalten, um zu verstehen, wie anwendbar dieser Wissensbereich in der Welt der Golang- Sprache ist . Wir haben uns bereits Vorlagen angesehen: Simple Factory , Singleton und Strategy . Heute möchte ich ein anderes Entwurfsmuster betrachten - Prototyp .
Wofür wird es benötigt?
Es ist ein generatives Entwurfsmuster, mit dem Objekte kopiert werden können, ohne auf die Details ihrer Implementierung einzugehen.
Welches Problem löst es?
Stellen Sie sich vor, Sie haben ein Objekt, das kopiert werden muss. Wie kann man es machen? Erstellen Sie ein leeres Objekt derselben Klasse und kopieren Sie die Werte aller Felder nacheinander vom alten zum neuen Objekt. Gut, aber es gibt eine Nuance! Nicht jedes Objekt kann auf diese Weise kopiert werden, da ein Teil seines Status privat sein kann, was bedeutet, dass auf den Rest des Programmcodes nicht zugegriffen werden kann.
Es gibt noch ein anderes Problem. Der Kopiercode hängt von den Klassen der kopierten Objekte ab. Um alle Felder eines Objekts zu durchlaufen, müssen Sie schließlich an seine Klasse binden. Aus diesem Grund können Sie keine Objekte kopieren, die nur ihre Schnittstellen und keine bestimmten Klassen kennen.
Was ist die Lösung?
Die Prototypvorlage weist die Kopierobjekte selbst an, Kopien zu erstellen. Es wird eine gemeinsame Schnittstelle für alle Objekte eingeführt, die das Klonen unterstützen. Dadurch können Objekte kopiert werden, ohne an ihre spezifischen Klassen gebunden zu sein. Typischerweise hat eine solche Schnittstelle nur eine Klonmethode.
. . , . , , , . , . .
- . , , . -, , . . , , .
, . - clone. . . , , . , . .
?
- . , . .. , - . , . , - , , ..
- , . , , , ..
, , prototype
, clone
. struct
, show
clone
prototype
.
, . directory
, prototype
. . show
, clone
. clone
, - , . , _clone
.
. . , . :
Open directory 2 Directory 2 Directory 1 category 1 category 2 category 3 Clone and open directory 2 Directory 2_clone Directory 1_clone category 1_clone category 2_clone category 3_clone
?
. , . , -, . .
. , - , , . . , .
, Prototype :
.
, .
, abstract factory, .
, , . 63% , Golang - . , , , Golang - . , . , , .