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 происходят несколько вещей:
- функция next - возвращает очередной элемент
- Ссылка на этот элемент передается в obj
- 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); } }

