Java/Паттерны

Материал из Викиучебника

Перейти к: навигация, поиск
Java в примерах


Содержание

[править] История

Идейным отцом применения шаблонов проектирования при разработке ПО считается профессора архитектуры Университета Калифорнии в Беркли Christofer Alexander.Однако по-настоящему ощутимый вклад в дело популяризации технологии шаблонов проектирования внесла изданная в 1995 году книга Design Patterns: Elements of Reusable Object-Oriented Software.’ Ее авторы Erich Gamma, Richard Helm, Ralph Johnson и John Vlissides приложили так много усилий для распространения своих идей, что заслужили шутливое прозвище “Банда четырех” (GoF — gang of four). В книге представлено введение в довольно сложный язык шаблонов с иллюстрациями реализации обсуждаемых шаблонов на языке C++.

[править] Итераторы

Iterator - это указатель который в каждый момент времени указывает на один из членов списка и умеет передвигаться на следующий член. Все классы-наследники Collection поддерживают итераторы.

Пример использования:

ArrayList arr = new ArrayList();
// ...
// Adding some elements into arr
// ...
Iterator iter = arr.iterator();
while(iter.hasNext()) {
  Object obj = iter.next();
  // ...
}

В строке 7 происходят несколько вещей:

  1. функция next - возвращает очередной элемент
  2. Ссылка на этот элемент передается в obj
  3. iter продвигается и указывает на следующий элемент

[править] Singleton

[править] Пример

class Singleton {
  private static Singleton _instance;
 
  private Singleton() {
  }
 
  public static Singleton getInstance() {
    if( _instance==null ){
      _instance = new Singleton();
    }
    return _instance;
  }
}

[править] Как это работает

Существует только один экземпляр класса. Т.к. конструктор приватный - то чтобы получить экземпляр класса нужно обязательно вызвать статическую функцию getInstance, которая заботится о том, что во всей системе есть только один экземпляр класса.

[править] Когда используют Singleton?

  • В том случае если мы хотим производить какое-либо действие при любом обращении к классу - это действие можно включить в функцию getInstance между строками 10 и 11. Например добавлять к статическому счетчику единицу - тогда мы будем в любой момент точно знать сколько раз запрашивался объект Singleton.
  • В случае кеширования данных.

[править] Factory

class Person {...}
class Worker extends Person {...}
class Manager extends Person {...}
 
class PersonFactory {
  private boolean isWorker(int id) {...}
 
  private boolean isManager(int id) {...}
 
  public Person getPerson(int id) {
    if(isWorker(id)) {
      return new Worker(id);
    }
    if(isManager(id)) {
      return new Manager(id);
    }
    return new Person(id);
  }
}

[править] Builder

Создать книгу
  • Добавить страницу
  • Справка по коллекциям