import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public final class Person {
private final int id;
private final String name;
private final Map knownPersons = new HashMap();
public Person(int id, String name) {
this.name = name;
this.id = id;
}
/**
* Метод возвращает объект персоны, с которой знакома данная персона
* Если персоны еще не знакомы, то текущая персона знакомится и запоминает
* В этом методе и есть весь смысл примера
*/
public Person getKnownPerson(int id) {
if (!knownPersons.containsKey(id)) {
knownPersons.put(id, new Person(id, getNameById(id)));
}
return knownPersons.get(id);
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
if (knownPersons.size() > 0) {
Iterator iterator = knownPersons.keySet().iterator();
while (iterator.hasNext()) {
int key = iterator.next();
Person person = knownPersons.get(key);
sb.append(person.toString());
}
} else {
sb.append("no known persons");
}
return "Person [id=" + id + ", name=" + name + ", knownPersons="
+ sb + "]";
}
private String getNameById(int id) {
return id + "'s Name";
}
public static void main(String[] args) {
Person person1 = new Person(1, "Вася Петя");
Person person2 = person1.getKnownPerson(2);
Person person3 = person1.getKnownPerson(3);
System.out.println(person2.toString());
System.out.println(person3.toString());
System.out.println(person1.toString());
}
}
/**
* Output:
* Person [id=2, name=2's Name, knownPersons=no known persons]
* Person [id=3, name=3's Name, knownPersons=no known persons]
* Person [id=1, name=Вася Петя, knownPersons=
* Person [id=2,name=2's Name, knownPersons=no known persons]
* Person [id=3, name=3's Name, knownPersons=no known persons]
* ]
*/
четверг, 18 августа 2011 г.
Ленивая инициализация. Пример кода
Подписаться на:
Комментарии к сообщению (Atom)
А где тут пример ленивой инициализации ?
ОтветитьУдалить