Как вы можете заставить шаблоны проектирования Java делать именно то, что вы хотите, и ускорить вашу карьеру менее чем за 1 неделю? Получите секретное оружие, которое каждый успешный Java-программист использует для написания кода, который можно многократно использовать, расширять и поддерживать в течение долгих лет... который использовался инженерами, которые принесли нам виртуальную машину Java и мощную экосистему...
Как и многие программисты моего поколения, я начал программировать на бейсике. После небольшого набега на Турбо Паскаль мой университет осторожно привел меня в C.
На протяжении всего моего университетского образования я изо всех сил пытался избавиться от вредных привычек, наделенных годами бейсика и C. Полиморфизм? Нет, я использовал операторы switch и условные выражения if.
Я был безумно продуктивен благодаря щедрому применению CTRL + C и CTRL + V. Частью моей работы был редактор для SDL, используемый для сетевых протоколов. Мой профессор и я продали это компании во Франции. Они посетили нас в университете Кейптауна, и им понравилась моя программа. Чтобы сделать его (редактор) идеальным, они хотели несколько изменений. Мне потребовалось всего несколько часов, чтобы закончить все, что они хотели.
Я использовал те же методы программирования из C и BASIC в моем коде C ++. Результатом стало множество операторов switch, распределенных по всей моей кодовой базе. Всякий раз, когда мне приходилось добавлять новый элемент дизайна, мне приходилось искать и изменять каждый оператор switch по очереди. Если бы я забыл один, что часто случалось, то одна функция больше не работала бы. Например, если я не изменил переключатель для печати, то мой новый элемент будет отображаться на экране, а не на распечатке. Каждый раз, когда я добавлял один элемент, мне приходилось проверять каждую функцию по очереди, чтобы убедиться, что все работает.
Этот тип поведения может быть нормальным, когда вы работаете только над этим кодом. Но это не делает чести Вам для счастливых товарищей по команде.
На моей первой настоящей работе мой наставник вручил мне книгу GoF и сказал: «Вот, ты должен это прочитать».
Большинство шаблонов показались мне знакомыми по многим годам написания кода на C ++. Я отложил это в сторону. Чему я могу научиться?
Год спустя я услышал Мартина Фаулера на конференции в Кейптауне. Он назвал «Шаблоны проектирования» самой значимой книгой по разработке программного обеспечения десятилетия.
Я поднял ее для второго чтения. Возможно, я что-то пропустил? Все это казалось очевидным с первого раза.
Я НЕ ПОНИМАЛ НИ СЛОВА ВО ВТОРОМ ЧИТАНИИ
Как могло случиться, что год опыта программирования сделал меня таким глупым? Конечно, реальное программирования должно иметь противоположный эффект, делая меня более ценным, как программист?
Действительно, так и было. Но когда я впервые прочитал книгу, мне не хватило понимания, чтобы понять ее истинную ценность. Слова Мартина Фаулера заставили меня во второй раз взять книгу, которую я отбросил как «совершенно очевидную».
Я боролся с каждым паттерном, пытаясь придумать места, где я видел его в нашем Java-проекте. Мы даже сформировали группу по изучению шаблонов дизайна, которая собиралась каждый пятничный обед.
МНОГИЕ КУРСЫ ОНЛАЙН ИМЕЮТ СЕРЬЕЗНЫЕ ОШИБКИ, КОТОРЫЕ БУДУТ ВРЕДИТЬ ВАМ!
Во время третьего чтения GoF у меня наконец-то появилась Эврика!. В каждом паттерне используется полиморфизм. Даже Синглтон. Это была ключевая концепция, используемая везде. Кроме того, в большинстве шаблонов используется комбинация наследования и композиции. В случае сомнений мы использовали композицию.
Если бы я знал все это во время учебы в университете, я мог бы избежать всех этих отвратительных высказываний.
Я погрузился в шаблоны, решив понять различные нюансы каждого дизайна. Я покупал книги, читал газеты, обратился к одному из авторов оригинальной книги GoF - Джону Флиссиду. Я даже провел технический обзор некоторых статей, написанных им для IBM (Composite1 и Composite2). Я изучал творчество Кристофера Александра, известного архитектора, чей язык шаблонов клонировало сообщество разработчиков программного обеспечения. После нескольких месяцев подготовки я был готов преподавать свой первый курс по шаблонам проектирования Java.
За свою 18-летнюю историю и с бесчисленными изменениями наш Курс по разработке шаблонов остается актуальным и полезным. Шаблоны Iterator, Composite и Strategy так же важны для Java 11, как и для Java 1.1. Как и в 90-е годы, шаблоны по-прежнему делают программистов более продуктивными и способными лучше общаться.
Java 8 добавил лямбды и ссылки на методы на язык. Это облегчает использование некоторых шаблонов, таких как Command. Методы по умолчанию в интерфейсах означают, что мы не всегда вынуждены использовать абстрактные классы.
Никто не любит прямые ссылки в книгах или курсах. «Не беспокойся об этом, мы сделаем это в следующей главе», как правило, отвлекает нас. Мы стараемся иметь как можно меньше из них.
Мы начнем с обширного знакомства с Java на современных виртуальных машинах. Многие проблемы в оригинальной книге «Банды четырех» связаны с тем, что у нас была только статическая компиляция. Java может оптимизировать наш код на лету. JIT-компилятор может даже встроить полиморфные вызовы методов, если он может определить, что это безопасно. Если позже появится другой тип подкласса, он отменит эту оптимизацию. Расходы на косвенные ссылки также указываются. Слишком много объектов? Не беспокойтесь, сборщик мусора прекрасно справляется с этим.
Одной из начальных заповедей является та, которая относится к мерономии. Это определяет то, что мы подразумеваем под «частично-целой иерархией». Причина, по которой мы заботимся о meronomy, заключается в том, что мы должны избегать утечек памяти в наших проектах - Утечки памяти должны быть в прошлом с автоматическим управлением памятью Java. К сожалению, они все еще случаются, когда мы игнорируем meronomy.
После нашего подробного введения мы начнем с простых шаблонов, которые встречаются повсюду. Шаблоны, такие как Стратегия, Итератор, Прокси и Абстрактный класс.
Большинство курсов и книг начинается с шаблонов создания Singleton и Factory Method. Мысль в том, что это очень простые шаблоны. Большинство курсов ошибаются, так как код может сломаться в работе.
Мы учимся больше, делая, а не слушая. Каждый шаблон сопровождается упражнениями, которые мы решаем, чтобы улучшить наше понимание шаблона. Для каждого упражнения у нас есть типовые решения и подробное пошаговое руководство, где я покажу вам процесс мышления при решении упражнения. Некоторые из упражнений сложны. Другие проще.
https://javaspecialists.teachable.com/p/dpc5