** Inhaltsverzeichnis ** Ein Muster, das Objekte erstellt, indem Teile zusammengefasst und geklont werden.
Klären Sie den Objekttyp, der mithilfe der Prototypinstanz erstellt werden soll, und erstellen Sie ein neues Objekt, indem Sie es kopieren.
-Prototyp Abstrakte Klasse, die dupliziert -ConcretePrototype Eine konkrete Klasse, die dupliziert wird -Client-Klasse, die die Replikation anfordert
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.
Prototyp-Schnittstelle
ProtoType.kt
package prototype
/**
*Prototyp
* Prototype
*/
interface ProtoType {
fun createEngine(): Engine
fun createTire(): Tire
}
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.
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.
[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