// 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