Паттерн: Стратегия (Strategy)
Исходник: Client.java, язык: java [code #526, hits: 7504]
автор: this [добавлен: 07.10.2007]
  1. package strategy;
  2.  
  3. import java.util.Calendar;
  4. import java.util.Comparator;
  5. import java.util.Set;
  6. import java.util.TreeSet;
  7.  
  8. public class Client {
  9. public static void main(String[] args) {
  10. int mode = 0;
  11.  
  12. try { mode = Integer.parseInt(args[0]); }
  13. catch (Exception e) {
  14. /* Просто игнорируем оставляя значение по-умалчанию
  15. * ...
  16. */
  17. }
  18.  
  19. /* Создаем всех пользователей (известных писателей)
  20. * В качестве даты регистрации делаем дату их рождения
  21. */
  22. Calendar calendar = Calendar.getInstance();
  23.  
  24. calendar.set(1799, 6, 6);
  25. User Пушкин = new User(1, "Пушкин Александр", calendar.getTime());
  26.  
  27. calendar.set(1868, 3, 28);
  28. User Горький = new User(3, "Горький Максим", calendar.getTime());
  29.  
  30. calendar.set(1828, 9, 28);
  31. User Толстой = new User(2, "Толстой Лев", calendar.getTime());
  32.  
  33. calendar.set(1905, 5, 11);
  34. User Шолохов = new User(5, "Шолохов Михаил", calendar.getTime());
  35.  
  36. calendar.set(1821, 11, 22);
  37. User Некрасов = new User(4, "Некрасов Николай", calendar.getTime());
  38.  
  39. Set<User> users = GetSet(mode);
  40. users.add(Пушкин);
  41. users.add(Горький);
  42. users.add(Толстой);
  43. users.add(Шолохов);
  44. users.add(Некрасов);
  45.  
  46.  
  47. System.out.println(users);
  48. }
  49.  
  50. /**
  51. * Создание множества с конкретной стратегией
  52. * сравнения
  53. * @param mode - код стратегии
  54. * @return Пустое множество, елементы которого
  55. * будут сортироваться определенным образом
  56. */
  57. public static Set<User> GetSet(int mode) {
  58. Comparator<User> sortStrategy;
  59. switch (mode) {
  60. case 2:
  61. System.out.println("Сортировка по дате регистрации");
  62. sortStrategy = new SortByDateStrategy();
  63. break;
  64. case 1:
  65. System.out.println("Сортировка по ФИО");
  66. sortStrategy = new SortByFioStrategy();
  67. break;
  68. default:
  69. System.out.println("Сортировка по ID-ку");
  70. sortStrategy = new SortByIDStrategy();
  71. break;
  72. }
  73. return new TreeSet<User>(sortStrategy);
  74. }
  75. }
Пример использования стратегий сортировки.

Обратите внимание на занимательную возможность языка Java присваивать переменным кирилические имена - это не опечатка, +в настройках кодировки файлов исходников нужно выставить UTF.
Тестировалось на: java 1.5.0_04

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