Паттерн: Наблюдатель (Observer)
Исходник: Users.java, язык: java [code #515, hits: 7585]
автор: this [добавлен: 06.10.2007]
  1. package observer;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import java.util.Observable;
  6.  
  7. public class Users extends Observable {
  8. private List<String> loggedIn = new ArrayList<String>();
  9.  
  10. public void login(String userName, String password) {
  11. if (!passwordValid(userName, password)) {
  12. throw new SecurityException("Пользователь с именем " + userName +
  13. " и паролем '" + password + "' - не найден!");
  14. }
  15.  
  16. loggedIn.add(userName);
  17. setChanged();
  18. notifyObservers(userName);
  19. }
  20.  
  21. public void logout(String userName) {
  22. loggedIn.remove(userName);
  23. setChanged();
  24. notifyObservers(userName);
  25. }
  26.  
  27.  
  28. /**
  29. * Проверка правильности имени и пароля.
  30. * Обратите внимание на то, что такого рода методы проверки
  31. * безопасности <b>всегда следует объявлять как final</b> для
  32. * предотвращения их умышленного переопределения с целью взолома
  33. * @param name - имя, логин пользователя
  34. * @param password - пароль пользователя
  35. * @return true/false
  36. */
  37. public final boolean passwordValid(String name, String password) {
  38. boolean res = false;
  39. /* ....
  40. * Проверка существования пользователя
  41. * с логином name и паролем password
  42. * ....
  43. * */
  44. return res;
  45. }
  46.  
  47. public boolean loggedIn(String name) {
  48. return loggedIn.contains(name);
  49. }
  50. }
Сущность ConcreteSubject

Субъект, оповещение в данном случае осуществляется при логине пользователей.
Тестировалось на: java 1.5.0_04

+добавить реализацию