Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Обсуждение паттернов


Автор: Domestic Cat 4.2.2005, 23:06
Ту тему я буду держать закрытой. Все вопросы, предложения и обсуждение - сюда.

Автор: batigoal 7.2.2005, 10:53
Прочитал статью про паттерны. Правильно ли я понял, что паттерны - не специфические классы и интерфейсы Java и С#, а просто способ организации собственых классов? То есть, например, Singleton - не класс, реализующий какой-нибудь интерфейс Singletonable ( smile ), а просто класс, для которого в данный момент времени может существовать только один экземпляр, и для него нет специальных требований по написанию?

Автор: Domestic Cat 7.2.2005, 20:27
Цитата
Прочитал статью про паттерны


Их еще многo smile

Цитата
просто класс, для которого в данный момент времени может существовать только один экземпляр, и для него нет специальных требований по написанию?


Вот 2 определения паттернов:

1. Паттерн - это набор правил, описывающих как выполнить определенную задачу в разработке ПО. (Прии)

2. Паттерн идентифицирует и определяет абстракцию, которая вышe уровня отдельногo класса или интерфейса (Гамма)

Паттерн - это некий способ организации объектов, при котором взаимодействующие объекты знают о внутреннеm устройствe друg другa кak можно меньше.


Автор: batigoal 8.2.2005, 11:47
Таким образом, эти термины используются для стандартизации концепций организации программ и облегчения взаимопонимания между разработчиками, да? Т.е. если я говорю, что мой класс является Composite-классом, то мой коллега понимает, что я использую структуру, подобную той, которая приведена тобой в примере.


Цитата(Domestic @ 7.2.2005, 20:27)
Их еще многo

А где можно найти более полное описание?

Автор: Domestic Cat 8.2.2005, 18:54
Цитата
Таким образом, эти термины используются для стандартизации концепций организации программ и облегчения взаимопонимания между разработчиками, да? Т.е. если я говорю, что мой класс является Composite-классом, то мой коллега понимает, что я использую структуру, подобную той, которая приведена тобой в примере.


Помимо этогo, использованиe паттернов улучшает реюзабилити кода, поддрживаемость, и пр.

Цитата
А где можно найти более полное описание?


В книгах
E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns. Elements of Reusable Object-Oriented Software.
James W. Cooper, The Design Patterns Java Companion
S. Stelting, O.Maasen, Applied Java Patterns
еще сотнe других.
Ну а я каждый день дополняю тему, есл ты заметил.

Автор: borisvolfson 11.2.2005, 00:31
IMHO, самое главный плюс паттернов они делают код более гибким для дальнейший модификации...

Автор: Wanderer2019 16.2.2005, 15:09
вот пишу с использованием DAO! вещь конечно хорошая, но очень много подготовки перед реальным использованием... крму интересно можно почитать здесь http://javagu.ru/portal/dt?last=false&provider=javaguru&ArticleId=ARTICLE_64404&SecID=SECTION_63501

Автор: 3,14 18.2.2005, 12:49
Цитата(Domestic @ 8.2.2005, 18:54)
E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns. Elements of Reusable Object-Oriented Software.

Вот тут эта книга есть в электронном виде, к тому же на русском : http://techlib.111mb.com/cgi/dl.php?a=0.1&m=10224a7a167ebcee&f=design_patterns.tgz

Автор: Domestic Cat 18.2.2005, 18:39
Цитата
Бедный комманд паттрен.
Мало того, что был превращён в какое-то "чудо", так ещё обозван не жизнеспособным


Во-первых, речь здесь не об энтерпрайз приложениях, а о J2SE / C# Windows Forms.
Во-вторых, тема создана для обсуждения а не для ироничных бессодержательных замечаний. Не нравится изложение - напиши свое или по крайней мере вырази свое мнение в более содержательной форме.
В-третьих, зарегистрируйся, т.к. разгваривать с гостем бессмысленное занятие. Иначе я просто буду удалять все твои посты чтоб время на разговоры с неизвестно кем не тратить.

Цитата(Wanderer2019 @ 16.2.2005, 06:09)
вот пишу с использованием DAO! вещь конечно хорошая, но очень много подготовки перед реальным использованием... крму интересно можно почитать здесь Data Access Object


Да, про j2ee паттерны тоже следовало бы написать smile

Автор: Souljah 18.2.2005, 19:06
http://ooad.asf.ru/patterns/viewpattlist.asp?cat=0

на русском
enjoy

Автор: Domestic Cat 18.2.2005, 19:33
Видимо мне следовало это сразу сказать, но изложение паттернов является сугубо субъективным, кроме того я пользуюсь принципом KISS - Keep It Simple Stupid. На написание новой книжки Гаммы и др. Reloaded у меня времени и таланта нет.
Конечно, Комманд петтерн, Action'ы в Java и пр - все это хорошо, но лично мне не приходилось применять этот паттерн в j2se.

Автор: NotGonnaGetUs 18.2.2005, 21:09
Цитата(Domestic @ 18.2.2005, 19:33)
Видимо мне следовало это сразу сказать, но изложение паттернов является сугубо субъективным, кроме того я пользуюсь принципом KISS - Keep It Simple Stupid. На написание новой книжки Гаммы и др. Reloaded у меня времени и таланта нет.
Конечно, Комманд петтерн, Action'ы в Java и пр - все это хорошо, но лично мне не приходилось применять этот паттерн в j2se.

Встречался апплет для редактирования html (не как html-текст, а что-то вроде word'a).

Там была проблема - жрались ресурсы дико.
Стал разбираться, оказалось, для Undo/Redo операций html преобразовавывался из внутреннего формата в String и сохранялся. Затем в обратную сторону, если надо было произвести откат.

Внутренний формат - сложно проиндексированный лист с кучей надстроек, для быстрого поиска строк.

Заменив все операции модификации внутреннего представления на комманды
(по одному классу для каждой операции, класс содержит методы execute() & undo() ), добавив стек для этих комманд, получилось
а) уменьшить память потребляемую программой в несколько раз.
б) увеличить время отклика на порядки для больших html-ек (> 1мб)
в) увеличить глубину ундо/редо - в разы smile


На основе этого паттерна строятся легко перенастраивамый контролллеры (хотя бы в рамках MVC).

Можно прописать в xml'ке соотвествие управляющих действий командам и не пересобирая код, менять поведение системы. В качестве такой системы может выступать юзер интерфейс, логика премещения "таракана" встречающего препятствия, и т.п. smile

Маверик весь построен на комманд паттерне(правда это j2ee).

Несколько сумбурно вышло, но что поделать. Рабочий день кончился, мозг отключается smile

Автор: djGri 21.2.2005, 18:28
2 Domestic Cat
Вопрос про Singleton:
1. Как насчет запрета на clone() ?

Автор: Domestic Cat 21.2.2005, 18:50
Само собой, подразумевается что класс нe наследует от Cloneable.

Автор: Slanix 28.2.2005, 12:09
Расскажите, плз, так же доступно, о паттерне State Machine.

Автор: Domestic Cat 2.3.2005, 06:23
Сделано.

Автор: batigoal 2.3.2005, 13:31
Вопрос насчет паттерна State: паттерном оговаривается, что объекты ConsoleState и FileState (в данном примере) должны быть созданы раз и насвсегда, или их можно создавать и удалять по мере необходимости? (т.е. произошло переключение на консоль - удаляем объект FileState и создаем ConsoleState)

Автор: NotGonnaGetUs 2.3.2005, 17:03
как хочешь - так и будет.
любое изложение паттерна - не является истинной в последней инстанции.
это просто пример организации кода, показавшийся кому-то полезным.

для примера можешь сравнить различные описания паттерна command (тут и, скажем, на http://ooad.asf.ru/ или любых других местах) ^_^






Автор: batigoal 2.3.2005, 17:16
Цитата(NotGonnaGetUs @ 2.3.2005, 17:03)
любое изложение паттерна - не является истинной в последней инстанции. это просто пример организации кода, показавшийся кому-то полезным

Конечно, не является, но ведь должна быть какая-то грань, за пределами которой считается, что классы не удовлетворяют данному паттерну.

А вообще, мне очень понравалась сама концепция. Можно найти много готовых типовых решений. Дело за малым - запомнить и начать применять. Выпишу их себе на стенку smile

Автор: Domestic Cat 2.3.2005, 18:41
Цитата
Вопрос насчет паттерна State: паттерном оговаривается, что объекты ConsoleState и FileState (в данном примере) должны быть созданы раз и насвсегда, или их можно создавать и удалять по мере необходимости?


Делай так, как тебe удобнее. это лишь пример smile

Автор: batigoal 2.3.2005, 19:18
Ok, "куплю и буду" smile

Автор: NotGonnaGetUs 2.3.2005, 20:51
http://patternshare.org/ наткнулся сегодня.
богатое место smile

Автор: batigoal 6.3.2005, 11:58
Вот такой вопрос. Когда вы используете какой-нибудь паттерн, как вы указываете это в коде - в названии класса, в комментарии, вообще не указываете или еще как?

Автор: Domestic Cat 6.3.2005, 19:10
Зависит от того, как принято там где ты работаешь. В принципе можно выносить в название класса : EmployeeFactory. В менее очевидных случаях пишу в явадоке.

Автор: batigoal 6.3.2005, 22:22
Наверное, лучше указывать в названии, понятнее как-то.
Цитата(Domestic @ 6.3.2005, 19:10)
Зависит от того, как принято там где ты работаешь

Собственно, никак. Там, где я работаю, на Java никто не пишет, и вообще у всех разные проекты. Но это оффтоп smile

Автор: jer1 29.3.2005, 14:25
фабричный метод

пакет: java.text содержит классы для работы с текстом (об этом свидетельствует и название пакета))
так вот там есть абстрактный класс NumberFormat, а у него есть factory- метод возвращающий конкретный экземпляр для конкретной локали (в большинстве случаев, наверное, DecimalFormat)
т. е. данный код вполне приемлем
Код

    NumberFormat nf = NumberFormat.getInstance();
    String s = nf.format(12.2);


вопрос по семантике: почему не был сделан отдельный класс, к примеру NumberLocaleFormat, c factory-метод getInstance(). А то как-бы смешивается абстрактность и неабстрактность

thanks in advance

Автор: Domestic Cat 30.3.2005, 04:58
На самом деле NumberFormat.getInstance возвращает объект класса DecimalFormat, который не является абстрактным. Просто он возвращаетшя под видом NumberFormat.

Автор: mr.DUDA 4.4.2005, 09:57
Имхо, раз рассмотрели паттерн фасад, то нужно привести и описание Mediator.
Кроме того, часто всеми используемый паттерн Observer (aka Publish / Subscribe) также заслуживает упоминания.

Ещё маленькое замечание по поводу исходников: мало (практически ноль) комментариев в коде...

И ссылочку на известную книгу "банды четырёх" можно было бы привести в начале темы.

Автор: Domestic Cat 4.4.2005, 09:59
Цитата(mr @ 4.4.2005, 00:57)
Имхо, раз рассмотрели паттерн фасад, то нужно привести и описание Mediator.
Кроме того, часто всеми используемый паттерн Observer (aka Publish / Subscribe) также заслуживает упоминания.

Все собираюсь добавить...


Автор: jer1 4.4.2005, 12:45
вот наткнулся
http://c2.com/cgi/wiki?JavaIdiom
по масштабу и степени повторного использование они мельче паттернов, но зато они ближе к языку

в ссылках есть переходы и на паттерны
Добавлено @ 12:46
вот наткнулся
http://c2.com/cgi/wiki?JavaIdiom
по масштабу и степени повторного использование они мельче паттернов, но зато они ближе к языку

в ссылках есть переходы и на паттерны
Добавлено @ 12:48
2 раз это от жадности smile

Автор: 3,14 4.5.2005, 15:52
Хотелось бы про Observer Pattern услышать.

Автор: Domestic Cat 4.5.2005, 18:19
Усе будет, сейчас занят немного smile

Автор: Гость_Levsha 5.12.2005, 20:37
что такое gof и grasp

Автор: batigoal 5.12.2005, 21:56
http://www.mindspring.com/~mgrand/pattern_synopses2.htm#GRASP%20Patterns
http://hillside.net/patterns/DPBook/GOF.html

Автор: ORM 8.12.2005, 22:46
Цитата(Domestic @ 4.2.2005, 23:06)
Ту тему я буду держать закрытой. Все вопросы, предложения и обсуждение - сюда.

Можно ссылку на ТУ тему?

Автор: LSD 8.12.2005, 23:07
Цитата(ORM @ 8.12.2005, 22:46)
Можно ссылку на ТУ тему?

http://forum.vingrad.ru/index.php?showtopic=41784

Автор: batigoal 8.12.2005, 23:10
Опс, а тему то-уже открепили...

Вот она: http://forum.vingrad.ru/index.php?showtopic=41784
Добавлено @ 23:12
Занесу-ка я ее в FAQ...

Автор: MrPayne 22.11.2006, 22:49
А у меня тут такая проблема...можно ли эти паттрены "припаять" к калькулятору написанному на Ява...и как? подскажите пожалуйста... smile 

Автор: batigoal 22.11.2006, 23:36
MrPayne, а тебе зачем?


Автор: Goliath 23.11.2006, 12:08
Цитата(3 @ 14, 4.5.2005,  15:52 Найти цитируемый пост)
Хотелось бы про Observer Pattern услышать. 

Цитата(onsh76)

Например, в МVC(Model-View-Controller) мы имеем два типа View, пусть это будут два клиента(Views),
отображающие одни и те же данные(Модель) своеобразно. Этот паттерн позволяет синхронно обновлять оба Views, если произошли изменения в модели. 

Автор: Jubei 23.11.2006, 17:50
Наверно это все-таки оффтоп 
 smile 
Советую всем начинающим изучение паттернов почитать книжку, O'Reilly 2004 Head First Design Patterns, правда весит зараза много она (54мб), но мне эта книжка очень понравилась (все написано понятным для чтения языком)

Автор: MrPayne 23.11.2006, 22:20
А мне это нужно для то, что мне дали написать курсовик: калькулятор с применением не менее 10ти паттернов, а лучше 15ти...а я ни в зуб ногой в этих паттернах smile ...после прочтения книжек легче чего-то не становится, а здавать мне это через 2 недели=((

Автор: LSD 23.11.2006, 22:23
Цитата(MrPayne @  23.11.2006,  22:20 Найти цитируемый пост)
калькулятор с применением не менее 10ти паттернов, а лучше 15ти...

Сколько??? Да тут больше 3-5 не куда применять.

Автор: MrPayne 24.11.2006, 19:11
Да мне уже хоть сколько, лишь бы было...сделайте пожалуйста, если можете...мне очень надо...

Автор: powerOn 24.11.2006, 20:51
Цитата(MrPayne @  24.11.2006,  19:11 Найти цитируемый пост)
Да мне уже хоть сколько, лишь бы было...сделайте пожалуйста, если можете...мне очень надо... 


У нас есть специальный раздел http://forum.vingrad.ru/Vingrad-help-center.html. Туда пиши свои мольбы. В данном разделе помогают разобраться, а не пишут за тебя код.

Автор: javalove 10.12.2006, 12:00
Народ, я тут почитал про ваши васказывания...
В общем, для нас, новичков, где можно найти e-book.?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)