003
20.12.2006, 16:55 Uhr
virtual
Sexiest Bit alive (Operator)
|
Zitat von Soto: |
Hallo,
was ich gerne schreiben möchte, ist eine Klasse, bei welcher, wenn ein Objekt von ihr erzeugt werden soll, zuerst entschieden wird, ob es ein Objekt dieser Klasse mit denselben Eingabeparametern nicht schon gibt. Beispielsweise macht es keinen Sinn, zwei Kugeln zu haben, die denselben Radius haben, da diese Kugeln dann ja ident sind. Es soll also vor Erzeugung einer Kugel überprüft werden, ob es schonmal eine Kugel mit diesem Radius gibt. Kann ich dazu eine Art modifiziertes Singleton-Pattern verwenden? Oder hat jemand eine bessere Idee?
|
Pattern ist gut, aber weniger ein Singelton Pattern, sondern vielmehr ein Factory Pattern.
Consider:
C++: |
class Kugel { private double radius;
// Private nur npotwendig, wenn Du Instantiierung allein über Factory haben willst: private: Kugel(double radius) :radius(radius) { };
public:
double gib_radius() const { return radius; } ...
friend class KugelFabrik; };
class KugelFabrik {
// Die Fabrik ist nun einsingleton private: std:map<double,Kugel*> kugeln;
KugelFabrik() { };
public: static KugelFabrik& dieFabrik() const { static KugelFabrik fabrik; return fabrik; };
Kugel& gibKugel(double radius) { // Geht auf effizienter und unübersichtlicher Kugel* kugel = kugeln[radius]; if (!kugel) { kugeln[radius] = kugel = new Kugel(radius); } return *kugel; } };
|
-- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |