[GO] [Gang of Four] Apprentissage des modèles de conception - Prototype

Prototype-Prototype

** Table des matières ** Un modèle qui crée des objets en regroupant et en clonant des pièces.

Objectif

Clarifiez le type d'objet à créer à l'aide de l'instance de prototype et créez un nouvel objet en le copiant.

Composant

-Prototype Classe abstraite qui duplique -ConcretePrototype Une classe concrète qui duplique -Client client qui demande la réplication

la mise en oeuvre

Nous mettrons en œuvre l'usine prototype nécessaire à la production de voitures en série.

Montez d'abord les pièces fabriquées par l'usine de prototypes.

** Classe de moteur **

Engine.kt


package prototype

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

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

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

** Classe de pneu **

Tire.kt


package prototype

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

    fun show() {
        print("【pneu】" + num + "Pièces")
    }

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

Ce qui précède sont les parties. Montez ensuite la voiture du produit.

** Classe de voiture **

Car.kt


package prototype

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

    fun show() {
        print("[Produit] Voiture")
        engine.show()
        tire.show()
        print("\n")
    }
}

Nous allons mettre en place une usine capable de produire en masse le moteur et le pneu mis en œuvre jusqu'à présent.

Classe abstraite de prototype pour la duplication

Interface de prototype

ProtoType.kt


package prototype

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

ConcretePrototype Classe concrète qui duplique

Classe d'usine prototype

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
    }
}

Enfin, nous mettrons en place une usine qui reçoit des pièces de l'usine de prototypes et fabrique en masse les produits.

Classe de client demandant la réplication

Classe d'usine de fabrication de voitures

Factory.kt


package prototype

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

        //Réglez le volume d'échappement à 1000cc
        prototypeFactory.engine.displacement = 1000
        //Production en série de 3 voitures avec une cylindrée de 1000 cm3
        massProduction(3)

        //Réglez le volume d'échappement à 2000cc
        prototypeFactory.engine.displacement = 2000
        //Production en série de deux voitures de 2000 cm3
        massProduction(2)

        //Réglez le volume d'échappement à 12000cc
        prototypeFactory.engine.displacement = 12000
        //Set 8 pneus
        prototypeFactory.tire.num = 8
        //Un bus qui produit en série 5 voitures avec des pneus de 12000 cm3 et 8 pneus?
        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()))
        }
    }
}

Avec ce qui précède, nous avons installé une usine qui peut produire en série des prototypes les uns après les autres. Contrairement au modèle [Abstract Factory](# abstract-factory), même si vous souhaitez produire en masse divers modèles, vous pouvez changer les membres des parties de la classe ProtoTypeFactory sans implémenter une nouvelle fabrique. J'ai fini.

Résultat de sortie

[output]
[Produit] Voiture [Moteur] 1000cc [Pneu] 4 pièces
[Produit] Voiture [Moteur] 1000cc [Pneu] 4 pièces
[Produit] Voiture [Moteur] 1000cc [Pneu] 4 pièces
[Produit] Voiture [Moteur] 1000cc [Pneu] 4 pièces
[Produit] Voiture [Moteur] 2000cc [Pneu] 4 pièces
[Produit] Voiture [Moteur] 2000cc [Pneu] 4 pièces
[Produit] Voiture [Moteur] 2000cc [Pneu] 4 pièces
[Produit] Voiture [Moteur] 12000cc [Pneu] 8 pièces
[Produit] Voiture [Moteur] 12000cc [Pneu] 8 pièces
[Produit] Voiture [Moteur] 12000cc [Pneu] 8 pièces
[Produit] Voiture [Moteur] 12000cc [Pneu] 8 pièces
[Produit] Voiture [Moteur] 12000cc [Pneu] 8 pièces
[Produit] Voiture [Moteur] 12000cc [Pneu] 8 pièces

Recommended Posts

[Gang of Four] Apprentissage des modèles de conception - Prototype
[Gang of Four] Apprentissage des modèles de conception
[Gang of Four] Apprentissage des modèles de conception - Décorateur
[Gang of Four] Apprentissage des modèles de conception - Visiteur
[Gang of Four] Apprentissage des modèles de conception - Médiateur
[Gang of Four] Apprentissage des modèles de conception - Façade
[Gang of Four] Apprentissage des modèles de conception - Composite
[Gang of Four] Apprentissage des modèles de conception --Mémento
[Gang of Four] Apprentissage des modèles de conception - État
[Gang of Four] Apprentissage des modèles de conception - Interprétation
[Gang of Four] Apprentissage des modèles de conception - Constructeur
[Gang of Four] Apprentissage des modèles de conception - Pont
[Gang of Four] Apprentissage des modèles de conception - Proxy
[Gang of Four] Apprentissage des modèles de conception - Stratégie
[Gang of Four] Apprentissage des modèles de conception - Adaptateur
[Gang of Four] Apprentissage des modèles de conception --Observer
[Gang of Four] Apprentissage des modèles de conception - Commande
[Gang of Four] Apprentissage des modèles de conception - Poids du vol
[Gang of Four] Apprentissage des modèles de conception - Usine abstraite
[Gang of Four] Apprentissage des modèles de conception - Méthode d'usine
[Gang of Four] Apprentissage des modèles de conception - Chaîne de responsabilité
[Gang of Four] Apprentissage des modèles de conception - Méthode du modèle
Modèles Gang of Four (GoF) en Python
Modèle de conception #Builder
Modèle de conception #Decorator
Apprentissage de la reconnaissance de formes en vidéo Partie 1 Champ de reconnaissance de formes
Modèle de conception #Observer
J'ai écrit un modèle de conception dans l'édition Kotlin Prototype
Modèle de conception #Facade
Modèle de conception #Strategy
Modèle de conception #Singleton
Modèle de conception #Proxy
Apprenez le modèle de conception «Chaîne de responsabilité» en Python
Design Pattern #Factory, méthode
Deep learning 1 Pratique du deep learning
Design Pattern #Template, méthode
Modèle de prototype en Java
Résumé des modèles de prototypes d'introduction aux modèles de conception appris en langage Java
L'histoire selon laquelle les modèles de conception du GoF ne sont rien de plus qu'une «introduction de couches abstraites»