![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Interpreter
Интерпретатор есть интерпретатор. Нужен он если 1. Необходимо парсить алгебраические выражения (см Origin, Mathematica, Matcad и пр.). 2. Необходимо "понимать" команды пользователя или выполнять определенные сценарии. Пример - скрипты в играх. 3. Нужно менять вывод данных, например, парсить команду юзера и выдавать необходимые столбцы БД, отсортированные по к-л признаку. Вот собственно, и все. Примеров здесь не будет, так как их можно найти где угодно, в том же Страуструпе, и переделать под нужный язык. -------------------- |
|||
|
||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Iterator
Позволяет скрыть внутреннюю структуру и бизнес логику коллекции данных, предоставляя стандартный интерфейс для клиента. Думаю, тут особо объяснять не нужно, так как итераторы являются неотъемлимой частью Java и C#. В Java есть интерфейс Iterator с методами hasNext, next, remove; C# - IEnumerator (Move, Reset, Current). Кроме того, в шарпе есть также индексеры, идея которых та же. Пример Java Без комментариев, все очевидно.
Преимущества Предоставляет стандартный интерфейс, чем и напоминает паттерн Bridge. Преимущества те же - реализация скрыта от клиента. -------------------- |
|||
|
||||
Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
State
Предположим, что нужно создать некий объект, который будет вести себя по-разному, в зависимости от его текущего состояния. Примером может служить объект типа логгер, который можно "переключать" между состоянием "писать в файл" и "выводить на консоль". Нетрудно догадаться, что реализация такого объекта включала бы множество конструкций if-else, что-то вроде
Чем больше возможный состояний, тем сложнее становится класс, тем труднее его менять и поддерживать. Чтобы исправить ситуацию, используем State паттерн. Вот одна из возможных реализаций : 1. Пишем абстрактный класс State с нужными нам методами 2. Пишем конкретные сабклассы State с реализацией этих методов. 3. Пишем класс, содержащий указатель на текущий сабкласс State. Для нашего случая (самого элементарного) логгера см. пример. Пример Java
-------------------- |
||||
|
|||||
Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Strategy
Strategy паттерн очень похож на State, но назначение у него иное. State паттерн означает что возможно переключение между состояниями, поэтому состояния сосуществуют. Strategy, как следует из названия, - это выбор стратегии поведения, алгоритма вычислений. Алгоритм выыбирается и используется чаще всего один раз, ингда даже не пользователем а автоматически. Примером является сохранение текста в редакторе - его можно сохранить в разных форматах - то есть, нужно выбрать алгоритм записи текста на диск. Различие между паттернами довольно тонкое - то, что в одной ситуации может выглядеть как "состояние", в другой окажется "стратегией". Все зависит от намерений программиста. Пример C#
-------------------- |
|||
|
||||
Dimonius |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 51 Регистрация: 11.10.2006 Репутация: 1 Всего: 1 |
А почему некоторые сообщения скрыты?
Где можно про паттерны более подробно почитать? (желательно учебник) |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Так надо.
Вот тут обсуждалось. |
|||
|
||||
0000 |
|
||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.7.2006 Где: Нижний Новгород Репутация: нет Всего: 5 |
про одиночку кто-то тут писал
код неверный...в этом случае GetInstance() в случае уже однажды созданного объекта Singleton instance вернет нулл... тут надо убрать else.. а метод Dispose вообще следует применять очень аккуратно, ведь удалив одиночку его можно будет создать потом еще - создастся уже другой одиночка...но опять же он будет один в системе.. вот так правильно:
|
||||
|
|||||
zaletskyy |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 18.4.2008 Где: Ukraine, L'vi v Репутация: нет Всего: нет |
Я пробывал в компиляторе запустить код для Factory, что ты приводил. И он особо не запускался. Вот код который я написал на основании твоего.
Что я сделал не так? Это сообщение отредактировал(а) zaletskyy - 18.4.2008, 11:59 |
|||
|
||||
Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
zaletskyy, какое отношение код сишарпа имеет к Java ?
|
|||
|
||||
EJack |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 110 Регистрация: 4.9.2007 Репутация: нет Всего: нет |
При реализации одиночки мне кажеться надо метод getInstance описывать как synchronized
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |