Шаблоны проектирования - это многократно используемые решения широко рaспространенных проблем, возникающих при разработке программного обеспечения(ПО).
По мере приобретения опыта программисты признают сходство новых проблем и решаемыми ими ранее. С накоплением большего опыта приходит осознание того, что решения похожих проблем представляют собой практически неизменяемые шаблоны. Зная эти шаблоны, опытные программисты распознают ситуацию их применения и сразу используют готовое решение, не тратя время на предварительный анализ проблемы.
В большинстве случаев путь от несформулированного интуитивного представления о хорошо продуманной идеи, которую программист может четко выразить словами, на удивление труден. Это очень важный этап, потому что если программист настолько хорошо понимает шаблон проектирования, что может писать его словами, то он в состоянии разумно комбинировать его с другими шаблонами. Еще важнее то, что однажды сформулированный шаблон может использоваться и другими программистами, знакомыми с этим шаблоном. Это позволяет программистам эффективнее сотрудничать и объединять свои интеллектуальные возможности. Кроме того, это помогает избежать таких ситуаций, когда программисты, обсуждая различные решения проблемы, только через некоторое время обнаруживают, что они имели в виду одно и то же решение, но выраженное разными способами. Следовательно, появляется необходимость в некой конкретизации и шаблонизации некоторых методов программирования и данная работа как-раз об этом.
Основная цель данной работы - предоставить конкретизированное описание наиболее простых и часто используемых шаблонов проектирования, а также выполнение технического задания с использованием некоторых из них.
Из вышесказанного описания можно сделать вывод, что шаблонов проектирования слишком много, отвечают они за разные вещи, а значит разбить их на классы достаточно трудно. На самом же деле это не совсем так. Все шаблоны проектирования можно разделить на: фундаментальные, порождающие, разделяющие, структурные, поведенческие.
Цель данной главы - рассмотреть различия между этими классами, описать основные достоинства и недостатки тех или иных шаблонов, а также вывести общую характеристику достоинств и недостатков тех или иных классов шаблонов проектирования.
Шаблоны в данной главе - самые фундаментальные и являются действительно основой. Они активно используются другими шаблонами.
Шаблоны: delegatlon, interface, abstract superclass и interface and Abstract Class показывают, как организовать отношения между классами. Большинство шаблонов следующих разделов используют минимум один из этих шаблонов в своей основе.
Шаблон ImmutabIe описывает, как избежать ошибок и задержек во время доступа многочисленных объектов к одному и тому же объекту. В отличие от предыдущих, данный шаблон достаточно редко используется в роли составной части другого шаблона, однако довольно часто используется вместе с ними
Шаблон Market Interface рассматривает способ упрощения проектирования классов с постоянным атрибутом типа boolean.
Шаблон Proxy является основой для многих шаблонов, реализующих логику управления доступом одногоo объекта к другому.
В ходе разработки данного приложения использовалось множество шаблонов проектирования, основные из них перечислены ниже.
· Adapter;
· Observer;
· Façade.
Класс-адаптер реализует интерфейс, известный его клиентам, и обеспечивает доступ к экземпляру класса, неизвестного его клиентам. Объект-адаптер предоставляет обещанную интерфейсом функциональность, скрывая от клиента информацию о классе.
Сложность класса-адаптера ничем не ограничена. До тех пор, пока основным назначением класса является использование его в качестве промежуточного звена при вызове методов другого объекта, его можно рассматривать как класс-адаптер.
В данном проекте шаблон проектирования Adapter реализован на примере классов «printer» и «PrinterAdapter». Класс принтер может выводить одну запись в таблицу задач. Однако данный функционал не полностью соответствует запросу пользователя. Пользователь хочет просматривать все записи из списка. Именно поэтому был разработан класс «PrinterAdapter». Данный класс может печатать все записи из списка задач, а разработан он на основе класса «Printer». Таким образом класс «PrinterAdapter» адаптирует функционал класса принтера под нужды пользователя. Ниже представлен код этих двух классов.
Цель данного курсового проекта – разработать приложение для менеджмента личных целей.
Разработанное приложение реализует следующий функционал:
· Добавление новой задачи;
· Вывод всех задач;
· Удаление выбранной задачи;
· Сохранения списка всех отображенных задач в файл формата XML;
· Считывание списка задач из выбранного файла XML и отображение данного списка в таблице.
В данной программе были использованы такие шаблоны проектирования как Adapter, Observer, Facade и многие другие.
При запуске программы пользователь видит окно, которое отображено на рисунке 1.
В результате выполнения курсовой работы было разработано приложение, предназначенное для планирования личных дел, проектов, задач. Разработка приложения осуществлялась в среде программирования Eclipse Jee Neon на языке Java на платформе Java EE с использованием библиотеки swing.
Одним из главных назначений разработанного приложения является осуществление быстрого и удобного доступа к необходимой информации, что позволит пользователю эффективно использовать свое время. Для реализации этого назначения в приложении предусмотрена такая функциональность, как добавление новых задач, удаление выбранной задачи, запись списка задач в файл и вывод задач из файла на экран.
СКРИНШОТЫ РАБОТЫ



1 Эккель, Б. Философия Java. Библиотека программиста. / Б. Эккель. – СПб.: Питер, 2009. – 640 с.
2 Васильев, А. Н. Java: объектно-ориентированное программирование / А. Н. Васильев. – СПб.: Питер, 2009. – 400 с.
3 Хорстманн, К. С. Java 2. Библиотека программиста: в 2т. Т 1. Основы / К. С. Хорстманн, Г. Корнелл. – М.: ООО «И.Д. Вильямс», 2009. – 816 с.
4 Кей, С. Библиотека профессионала. Java. Том 1. Основы / С. Кей, Г. Корнелл. – М.: – Издательский дом "Вильяме", 2003. – 848 с.
5 Кей, С. Библиотека профессионала. Java. Том 2. Расширенные средства программирования / С. Кей, Г. Корнелл. – М.: – Издательский дом "Вильяме", 2014. – 1008 с.
6 Портянкин, И. Swing. Эффектные пользовательские интерфейсы / И. Портянкин. – Питер, 2005. – 528 с.
7 Хорстман, K. Java 2, 7-изд. / К. Хорстман, Г. Корнелл. – СПБ.: 2007. – 2049 с.
8 Шилдт, Г. Полный справочник по Java. 6-e издание / Г. Шилдт. – СПБ.: 2007. – 1030с.
9 Блинов, И.Н. JAVA. Методы Программирования / И.Н. Блинов, В.С. Романчик. – Мн.: Издательство «Четыре четверти», 2013. – 896 с.
10 Вязовик, Н. А. Программирование на Java / Н. А. Вязовик. – М.: МФТИ, 2003. – 296 с.
11 Блинов, И. Н. Java. Промышленное программирование / И. Н. Блинов, В. С. Романчик. – Мн.: УниверсалПресс, 2007. – 704 с.
12 Сообщество программистов [Электронный ресурс]. – Режим доступа: https://stackoverflow.com/свободный. – Дата доступа: 25.04.2017.