|
|
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
Из за того что интерес к Пятничным задачкам остыл - предлагаю новую тему - Пятничный Паттрен - и так мы берем по порядку - один паттрен на java из книги http://vk.com/doc29055700_262036131] Design Patterns in Java Tutorial И рассказываем о том как это паттерн применяется в обычной жизни ... и совсем необязательно в программировании. но пару пример где его нужно применить в коде - указать все таки нужно! Для чего это нужно ?! Таким образом я хочу для себя разобраться в Паттернах - понять где и как они применяются , уметь видеть их в коде и в жизни ... Думаю эта тема будет полезна для всех кто только начал изучать java и кто уже потратил годы ... Первый паттерн : Factory Pattern Shape.java Код: java 1. 2. 3. Rectangle.java Код: java 1. 2. 3. 4. 5. 6. 7. Square.java Код: java 1. 2. 3. 4. 5. 6. 7. Circle.java Код: java 1. 2. 3. 4. 5. 6. 7. ShapeFactory.java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. FactoryPatternDemo.java Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Verify the output. Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 12:30 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
Начну Сам : Антипаттерн – публикация this в конструкторе Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. решение - использовать фабричный метод : Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 12:57 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
Atum1, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. А если у CIRCLE есть поле, например, радиус. То Код: java 1. 2. и чем это лучше: Код: java 1. 2. ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 13:19 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
no56892, Думаю идея такая : Код: java 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 13:36 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
Atum1, Идея в том что вы не создаете - новые объекты где попало и как попало -а берете из из одного места ! К примеру в определенном месте кода Вам надо добавить цвет к фигуре (закрасить ее). И передать дальше по вашей логики в этом методе Вам нужно будет создавать каждый раз новый экземпляр - выставлять ему цвет и отдавать дальше , вопрос как отдавать ? в такой схеме - Proxy метод будет таким : Код: java 1. 2. 3. 4. 5. может кто то придумает более корректную задачу ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 13:50 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
Просьба! Если пишите про антипаттеры, то пишите почему так делать не надо! Иначе это выглядит совершенно безапелляционно! В часности, публикация this в конструкторе плоха тем, что если после публикации возникнет исключение, то обьект не будет удален сборщиком мусора, но по факту обьект будет неполностью сконструированым. Кроме того, при публикации this в другой поток, этот другой поток может вызывать методы в то время как в данном потоке еще не завершился конструктор. И возможно еще что-нибудь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 14:15 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
chabapokВ часности, публикация this в конструкторе плоха тем, что если после публикации возникнет исключение, то обьект не будет удален сборщиком мусора... Не понял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 14:18 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
BlazkowiczchabapokВ часности, публикация this в конструкторе плоха тем, что если после публикации возникнет исключение, то обьект не будет удален сборщиком мусора... Не понял. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 14:30 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
Atum1, Я так и не понял профита от паттернов проектирования, если честно. Те примеры, в т.ч. в википедии, хорошо смотрятся на идеальных задачах, а если попробовать сделать программу не ради самих паттернов, а для какой-то цели, то все-равно в итоге получится каша. У вас даже для того, чтобы получить цвет фигуры необходимо написать 5 строчек кода. Дак где профит от их использования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 14:36 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
no56892 Я так и не понял профита от паттернов проектирования, если честно. Те примеры, в т.ч. в википедии, хорошо смотрятся на идеальных задачах, а если попробовать сделать программу не ради самих паттернов, а для какой-то цели, то все-равно в итоге получится каша. У вас даже для того, чтобы получить цвет фигуры необходимо написать 5 строчек кода. Дак где профит от их использования? Паттерны проектирования, на самом деле это не столько руководство к действию, сколько справочник именования типовых подходов. Отсюда и подобное недопонимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 14:39 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
no56892, Это нормально. Профит бывает не всегда и не везде, а только там где паттерн реально к месту. Некоторые задачи без паттернов получаются короче (иногда - значительно короче), но менее наглядны и менее гибки, и паттерн используют для гибкости. А инога паттерны только мешают... Для каждой конктретной ситуации надо смотреть оправданность применения паттерна. Я вот, например, непонимаю профита от Hibernate - куча конфигов в разных местах, для моих задач быстрей написать инсерты, и кода раз в 5 меньше выходит. Просто скорей всего это значит, что он ненужен для моих задач. ps. Профита от ShapeFactory в таком виде как приведено, тоже не вижу. Разве что эти строки "CIRCLE", "RECTANGLE" и тд приходят извне и известны только на этапе выполнения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 14:52 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
chabapok, Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. Но вопрос был про сборщик мусора. В С++, например, в таких случая(исключение в конструкторе) не бывает утечки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 14:57 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
Спасибо! корректное замечание! chabapokПросьба! Кроме того, при публикации this в другой поток, этот другой поток может вызывать методы в то время как в данном потоке еще не завершился конструктор. И возможно еще что-нибудь. Думаю это самое главное - в многопоточном программирование использование антипаттерна опасно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:11 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
Использование патерна хорошо видно на таком примере : (тут нужно знать Модель памяти Java. ) До завершения конструктора объект может быть не целостным (не все поля инициализированы, не все инварианты состояния выполняются) Источник неприятностей : ссылка на объект доступна другому потоку до создания объекта и нет никаких специальных синхронизаций . Пример небезопасной инициализации Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: java 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:16 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
Atum1Начну Сам : Антипаттерн – публикация this в конструкторе [src java] public class ThisEscape { ... public ThisEscape(EventSource source) { source.registerListener(new EventListener() { public void onEvent(Event e) { doSomething(e); } }); ... } } Антипаттерн вроде как предполагает, что "так делать плохо". Ну и чем же плохо так делать, объясни ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:28 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
MasterZivАнтипаттерн вроде как предполагает, что "так делать плохо". Ну и чем же плохо так делать, объясни ... Вроде как уже привели пример и рассказали!? Давайте так Вы сами - приведете пример! :) так будет лучше - для Вас . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:35 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
Atum1решение - использовать фабричный метод : Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Самый большой антипаттерн Java-программистов -- это повальный идиотизм. Ну вот нахрена писать в SafeListener вложенный нестатический класс, если можно сам SafeListener уже унаследовать от EventListener и реализовать там этот void onEvent(Event e) ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:37 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Наследлование - антипаттерн. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:42 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
Atum1MasterZivАнтипаттерн вроде как предполагает, что "так делать плохо". Ну и чем же плохо так делать, объясни ... Вроде как уже привели пример и рассказали!? Давайте так Вы сами - приведете пример! :) так будет лучше - для Вас . По мне, пример показывает что не надо(нельзя) чтобы конструктор генерировал исключение, или создавай метод и вызывай после создания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:42 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
no56892Atum1, Я так и не понял профита от паттернов проектирования, если честно. .... Дак где профит от их использования? Паттерны проектирования -- это стандартный способ решить стандартные задачи. Всё, не больше, и не меньше. Если твоя задача совпадает со стандартной, ты можешь её решить этим стандартным образом, уже кем-то придуманным и поделёным с тобой (собственно, поделиться опытом -- и была задача ТОЙ книги). Или ты можешь порвать на груди тельняшку и придумать свой, другой способ. И потом им поделиться с миром. Ну и профит в том, что если тельняшку рвать не охота, можешь сделать, как уже придумали другие. Вот собственно и всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:42 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
Atum1MasterZivАнтипаттерн вроде как предполагает, что "так делать плохо". Ну и чем же плохо так делать, объясни ... Вроде как уже привели пример и рассказали!? Давайте так Вы сами - приведете пример! :) так будет лучше - для Вас . Я сверху вниз иду и пишу.. потом дальше читаю, потом дальше пишу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:43 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
ЛагманMasterZiv, Наследлование - антипаттерн. Ну, если не умеешь им пользоваться -- то да... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:44 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
у java-девелопера почти всё - "паттерн". Даже цикл и операция логического ветвления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 15:44 |
|
||
|
Friday pattern
|
|||
|---|---|---|---|
|
#18+
0FDНо вопрос был про сборщик мусора. В С++, например, в таких случая(исключение в конструкторе) не бывает утечки. фраза "Не понял" не является вопросом про сборку мусора. Тот код что я привел - не утечка памяти. Ведь обьект доступен, и пользоваться им можно, другое дело что он недоконструирован что не есть хорошо. А то что вы добавили - не приводит проблемам недоконсруированных обьектов. Сборка мусора не при чем, хотя и добавляет очевидну фичу - раз ссылка на обьект есть, он собран не будет. В с++ точно так же можно опубликовать ссылку на себя в конструкторе и поиметь sigseg когда-нибудь потом. кто-тоНу вот нахрена писать в SafeListener вложенный нестатический класс, если можно сам SafeListener уже унаследовать от EventListener SafeListener может уже наследовать что-то полезное... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2014, 16:13 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38529617&tid=2122558]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
161ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
82ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 509ms |

| 0 / 0 |
