[GO] [Viererbande] Designmuster lernen - Prototyp

Prototyp-Prototyp

** Inhaltsverzeichnis ** Ein Muster, das Objekte erstellt, indem Teile zusammengefasst und geklont werden.

Zweck

Klären Sie den Objekttyp, der mithilfe der Prototypinstanz erstellt werden soll, und erstellen Sie ein neues Objekt, indem Sie es kopieren.

Komponente

-Prototyp Abstrakte Klasse, die dupliziert -ConcretePrototype Eine konkrete Klasse, die dupliziert wird -Client-Klasse, die die Replikation anfordert

Implementierung

Wir werden die Prototypenfabrik implementieren, die für die Massenproduktion von Autos erforderlich ist.

Montieren Sie zuerst die Teile, die vom Prototypenwerk hergestellt wurden.

** Motorklasse **

Engine.kt


package prototype

class Engine(displacement: Int): Cloneable {
    var displacement = displacement

    fun show() {
        print("【Motor】"+ displacement +"cc ")
    }

    public override fun clone(): Any {
        return super.clone()
    }
}

** Reifenklasse **

Tire.kt


package prototype

class Tire(num: Int): Cloneable {
    var num = num

    fun show() {
        print("【Reifen】" + num + "Stücke")
    }

    public override fun clone(): Any {
        return super.clone()
    }
}

Die oben genannten sind die Teile. Dann montieren Sie das Produktauto.

** Fahrzeugklasse **

Car.kt


package prototype

class Car(engine: Engine, tire: Tire) {
    val engine = engine
    val tire = tire

    fun show() {
        print("[Produkt] Auto")
        engine.show()
        tire.show()
        print("\n")
    }
}

Wir werden eine Fabrik implementieren, in der die bisher implementierten Motoren und Reifen in Serie hergestellt werden können.

Prototype Abstract-Klasse zur Vervielfältigung

Prototyp-Schnittstelle

ProtoType.kt


package prototype

/**
 *Prototyp
 * Prototype
 */
interface ProtoType {
    fun createEngine(): Engine
    fun createTire(): Tire
}

ConcretePrototype Konkrete Klasse, die dupliziert

Prototyp Fabrikklasse

ProtoTypeFactory.kt


package prototype

class ProtoTypeFactory: ProtoType {
    var engine = Engine(0)
    var tire = Tire(4)

    override fun createEngine(): Engine {
        return engine.clone() as Engine
    }

    override fun createTire(): Tire {
        return tire.clone() as Tire
    }
}

Schließlich werden wir eine Fabrik implementieren, die Teile aus der Prototypenfabrik erhält und die Produkte in Massenproduktion herstellt.

Client-Klasse, die die Replikation anfordert

Fabrikklasse der Automobilherstellung

Factory.kt


package prototype

class Factory {
    var carList:MutableList<Car> = mutableListOf()
    var prototypeFactory = ProtoTypeFactory()
    init {

        //Stellen Sie das Abgasvolumen auf 1000cc ein
        prototypeFactory.engine.displacement = 1000
        //Massenproduktion von 3 Autos mit 1000cc Hubraum
        massProduction(3)

        //Stellen Sie das Abgasvolumen auf 2000cc ein
        prototypeFactory.engine.displacement = 2000
        //Massenproduktion von zwei 2000ccm Autos
        massProduction(2)

        //Stellen Sie das Abgasvolumen auf 12000cc ein
        prototypeFactory.engine.displacement = 12000
        //Setze 8 Reifen
        prototypeFactory.tire.num = 8
        //Bus, der 5 Autos mit 12000ccm Reifen und 8 Reifen in Serie produziert?
        massProduction(5)

        for (car in carList) {
            car.show()
        }
    }

    private fun massProduction(num: Int) {
        for (i in 0..num) {
            carList.add(Car(prototypeFactory.createEngine(), prototypeFactory.createTire()))
        }
    }
}

Mit dem oben Gesagten haben wir eine Fabrik installiert, in der Prototypen nacheinander in Serie hergestellt werden können. Im Gegensatz zum Muster [Abstract Factory](# abstract-factory) können Sie, selbst wenn Sie verschiedene Modelle in Massenproduktion herstellen möchten, die Mitglieder der Teile der Klasse "ProtoTypeFactory" ändern, ohne eine neue Factory zu implementieren. Ich bin fertig.

Ausgabeergebnis

[output]
[Produkt] Auto [Motor] 1000cc [Reifen] 4 Stück
[Produkt] Auto [Motor] 1000cc [Reifen] 4 Stück
[Produkt] Auto [Motor] 1000cc [Reifen] 4 Stück
[Produkt] Auto [Motor] 1000cc [Reifen] 4 Stück
[Produkt] Auto [Motor] 2000cc [Reifen] 4 Stück
[Produkt] Auto [Motor] 2000cc [Reifen] 4 Stück
[Produkt] Auto [Motor] 2000cc [Reifen] 4 Stück
[Produkt] Auto [Motor] 12000cc [Reifen] 8 Stück
[Produkt] Auto [Motor] 12000cc [Reifen] 8 Stück
[Produkt] Auto [Motor] 12000cc [Reifen] 8 Stück
[Produkt] Auto [Motor] 12000cc [Reifen] 8 Stück
[Produkt] Auto [Motor] 12000cc [Reifen] 8 Stück
[Produkt] Auto [Motor] 12000cc [Reifen] 8 Stück

Recommended Posts

[Viererbande] Designmuster lernen - Prototyp
[Viererbande] Designmuster lernen
[Viererbande] Design Pattern Learning --Decorator
[Viererbande] Designmuster lernen --Besucher
[Viererbande] Design Pattern Learning - Vermittler
[Viererbande] Designmuster lernen - Fassade
[Viererbande] Design Pattern Learning - Composite
[Viererbande] Designmuster lernen - Andenken
[Viererbande] Designmuster lernen - Staat
[Vierergruppe] Design Pattern Learning - Interpreter
[Viererbande] Design Pattern Learning - Builder
[Viererbande] Designmuster lernen - Brücke
[Viererbande] Designmuster lernen --Proxy
[Viererbande] Design Pattern Learning - Strategie
[Viererbande] Designmuster lernen --Adapter
[Viererbande] Design Pattern Learning - Beobachter
[Viererbande] Designmuster lernen - Befehl
[Viererbande] Designmuster lernen - Fluggewicht
[Viererbande] Designmusterlernen - Abstract Factory
[Viererbande] Designmuster lernen - Fabrikmethode
[Viererbande] Designmuster lernen - Kette der Verantwortung
[Viererbande] Design Pattern Learning - Template-Methode
Gang of Four (GoF) -Muster in Python
Entwurfsmuster #Builder
Entwurfsmuster #Decorator
Lernen der Mustererkennung im Video Teil 1 Bereich der Mustererkennung
Entwurfsmuster #Observer
Ich habe ein Designmuster in der Kotlin Prototype Edition geschrieben
Entwurfsmuster #Facade
Entwurfsmuster #Strategie
Entwurfsmuster #Singleton
Entwurfsmuster #Proxy
Lernen Sie das Entwurfsmuster "Chain of Responsibility" in Python
Entwurfsmuster #Factory-Methode
Deep Learning 1 Übung des Deep Learning
Entwurfsmuster # Template-Methode
Prototypmuster in Java
Zusammenfassung der Prototypmuster der Einführung in Entwurfsmuster, die in Java gelernt wurden
Die Geschichte, dass GoF-Designmuster nichts anderes sind als "Einführung abstrakter Ebenen"