Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
70 lines (65 sloc) 2.4 KB
interface Prototype
// wird benötigt um eine sogenannte "Tiefe Kopie" zu erstellen.
// dies beinhaltet alle Elemente des aktuellen objekts, sowie allen
// anderen Referenztypen, die von dem aktuellen Objekt verwendet werden.
method deepCopy()
// wird benötigt um eine "Flache Kopie" zu erstellen.
// Eine flache Kopie beinhaltet ausschließlich die Werte des aktuellen
// objekts. Sollte ein Referenztyp integriert sein, so wird dieser nicht
// kopiert, sondern als Referenz verknüpft
method shallowCopy()
// Ein Klon ist eine exakte Abbildung des Originals.
// Dies beinhaltet auch die möglicherweise verwendeten IDs.
method clone()
class ConcretePrototype extends Prototype
fielt id : int
// stellvertretend für alle Wertetypen, wie z.B. ein integer
field value : any
// stellvertretend für alle Referenztypen, wie z.B. ein string
// obwohl ein string eigentlich eine kleine besonderheit ist :-)
field reference : any
// falls wir ein anderen Prototypen in dem Datenmodel haben
// können wir uns natürlich die vorhandene Logik zunutze machen
field other : IPrototype
method deepCopy () : ConcretePrototype
clone = new ConcretePrototype()
clone.value = this.value
// Für den Referenztypen wird immer eine neue Instanz erzeugt
// d.h. Es gibt immer eine neue Adresse im Speicher
clone.reference = new string(this.reference)
// hier wird lediglich der Befehl weitergereicht
clone.other = other.deepCopy()
method shallowCopy() : ConcretePrototype
clone = new ConcretePrototype()
clone.value = this.value
// Hier werden lediglich die Referenzen kopiert. Beide Objekte sind
// komplett identisch. Änderungen an der Kopie haben auch Auswirkungen
// auf das original
clone.reference = this.reference
// auch der prototyp wird kopiert
clone.other = this.other
method clone() : ConcretePrototype
clone = deepCopy()
// zusätzlich wird noch die ID kopiert (falls vorhanden)
clone.id = this.id
// ein vorhandener Prototyp wird ebenfalls geklont
clone.other = this.other.clone()
program Client
data = new ConcretePrototype()
data.id = 42
data.value = 3.14
data.reference = "Hello World"
// ...
copy1 = data.deepCopy()
copy2 = data.shallowCopy()
copy3 = data.clone()
// ...
data.reference = "Hallo Welt"
//
// WERTE
// copy1.reference = "Hello World"
// copy2.reference = "Hallo Welt"
// copy3.reference = "Hello World"
// copy1.id = 0
// copy2.id = 0
// copy3.id = 42
You can’t perform that action at this time.