// lazy initialization part types[type] = f; return f;
else { return iter->second;
/* * For example purposes to see pattern in action */ void Fruit::printCurrentTypes() { if (types.size() > 0) { cout << "Number of instances made = " << types.size() << endl; for (map<string,Fruit*>::iterator iter = types.begin(); iter != types.end(); ++iter) { cout << (*iter).first << endl;
cout << endl;
int main(void) { Fruit::getFruit("Banana"); Fruit::printCurrentTypes();
Fruit::getFruit("Apple"); Fruit::printCurrentTypes();
// returns pre-existing instance from first // time Fruit with "Banana" was created Fruit::getFruit("Banana"); Fruit::printCurrentTypes();
return 0; } /* OUTPUT: Number of instances made = 1 Banana
Number of instances made = 2 Apple Banana
Number of instances made = 2 Apple Banana */
SmallTalk Poniżej jest przykład napisany w języku Smalltalk, używający metody dostępowej do zwracania wartości zmiennej przy pomocy leniwego inicjowania.
height height ifNil: [height := 2.0]. ^height
Alternatywą jest "nieleniwe" inicjowanie, które polega na użyciu inicjującej metody przy tworzeniu obiektu i wykorzystaniu metody dostępowej do pobierania wartości.
initialize height := 2.0
height ^height