ObjectiveCeeds › Cocoa Designpattern: Class Cluster

Cocoa Designpattern: Class Cluster

Von Manfred Kreß

Seite 1 von 3



Viele Klassen sind in Cocoa als so genannter "Cluster" implementiert. Beispiele sind NSString, NSNumber, NSArray und viele mehr. In diesem Artikel erfahren Sie, was es mit diesen Cluster Klassen genau auf sich hat und wie sie implementiert werden.

Ein Cluster bietet dem Anwender ein sichtbares Interfaceobjekt mit dem er arbeiten kann. Tatsächlich erzeugt ein Cluster dann aber unterschiedliche Objekte, die auf den jeweiligen Anwendungsfall abgestimmt sind. Die Implementierungsdetails sind vom Anwender nicht erkennbar. Nehmen Sie zum Beispiel NSNumber. NSNumber kann numerische Werte unterschiedlichen Typs speichern wie float, double, int, long long etc.. Würde man diese alle in ein und der selben Klasse handhaben wollen, müsste diese Klasse in der Lage sein, alle diese Typen zu speichern, obwohl immer nur ein einziger benötigt wird. Ebenso müssten Methoden wie + (float)floatValue oder + (int)intValue dann auch jedes mal die Typen entsprechend behandeln, sprich bei der Rückgabe herausfinden welcher Typ eigentlich gespeichert ist und entsprechend casten. Der Code, der diese Anforderungen erfüllt, würde sehr umfangreich werden. Statt dessen gibt es mehrere Klassen, die den jeweiligen Typ handhaben, beispielsweise eine für integer und eine für float Werte. Der Anwender sieht aber nur die Klasse NSNumber, welche sozusagen nur die Spitze des Eisbergs darstellt. NSNumber besitzt nun Methoden, um Objekte unterschiedlichen Typs zu initialisieren, initWithInt: , initWithFloat: etc.. Diese Erzeugermethoden geben dann aber keine Instanzen von NSNumber zurück, sondern von Subklassen, die dann den entsprechenden Typ sehr speziell handhaben. Von der Interfaceklasse selbst wird nie eine Instanz erzeugt. Man nennt eine solche Klasse daher auch eine abstrakte Klasse.

nächste Seite »
Seite: 1 von 3


Cocoa Designpattern: Class Cluster

OCNumber
Die Implementation