«Нахождение закономерностей — суть мудрости». — Деннис Прагер
Что такое шаблоны проектирования?
Разработка программного обеспечения — это сложный набор процессов, и когда дело доходит до разработки и реализации решения для конкретной проблемы, оно должно быть удобным в сопровождении и повторном использовании — это одни из наиболее важных факторов в современном программном обеспечении.
В программной инженерии одна и та же проблема возникает несколько раз. со временем некоторые решения предпочтительнее других из-за их повторного использования, удобства обслуживания и гибкости.
Эти решения мы называем шаблонами дизайна, это проверенное на практике решение повторяющихся проблем дизайна. Используя шаблоны проектирования, разработчикам не нужно внедрять парадигмы программирования с нуля. Эти шаблоны проектирования ранее использовались в больших системах и доказали свою способность к хорошему проектированию.
Как помогает шаблон проектирования
Шаблоны проектирования доказали и протестировали их использование в реальном программном обеспечении, разработчикам, работающим над проектированием, созданием и документированием программного обеспечения, не нужно создавать шаблоны с нуля, а во время общения и документирования они предоставляют общие имена и структуры для разработчикам это экономит много времени и гарантирует качество кода.
Тип шаблонов проектирования
В книге «Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения» упоминается 23 шаблона проектирования. автор:The Gang of Four. Шаблоны проектирования различаются от одной системы к другой в зависимости от проблемы. Все эти шаблоны проектирования делятся на три основные категории. и несколько подкатегорий.
Креативные шаблоны. Шаблоны креативного дизайна связаны с тем, как создавать, клонировать и инициализировать объекты дизайна.
Структурные шаблоны. Структурные шаблоны описывают, как объекты связаны. этот шаблон использует концепции декомпозиции и обобщения для определения отношений между объектами и того, как они связаны.
Поведенческие паттерны. Поведенческие паттерны сосредоточены на том, как объекты распределяют работы. он определяет, как установленные объекты работают для достижения общей цели и как один объект выполняет каждую из целей для достижения этой общей цели.
Теперь давайте рассмотрим каждый из подшаблонов внутри трех основных паттернов.
1. Творческие шаблоны
Синглтон шаблон
Синглтон — это простейшая форма шаблонов проектирования, синглтон означает что-то единственное, что означает наличие только одного. в программе Java одноэлементный объект означает создание только одного объекта для всего приложения. (на JVM). и этот объект глобально доступен в приложении.
Вот Пример реализации шаблона Singleton.
В Singleton важно не передавать параметры для создания объектов.
Шаблон фабричного метода
В паттерне Singleton мы не передавали никаких параметров, и нам известен объект вывода/возврата. Но в фабричном шаблоне проектирования разработчик может передавать параметры и зависеть от параметров, которые используются при создании, возвращаемый объект будет меняться.
В фабричных шаблонах проектирования для создания объектов, обрабатываемых подклассами.
Вот Пример реализации шаблона фабричного метода.
Шаблон проектирования прототипа
Бывают ситуации, когда необходимо создать множество объектов. Создание объектов — это процесс, требующий больших затрат памяти, производительность корпоративных приложений является критическим фактором, поскольку создание большого количества объектов создает узкие места в производительности.
Шаблон проектирования «Прототип» решает эту проблему, клонируя объекты, а не создавая их. перед клонированием должен быть реализован «Клонируемый» интерфейс.
Есть два способа клонирования объекта.
- Поверхностное копирование. Все значения объекта копируются в новый объект. и он всегда копирует исходные значения из примитивных переменных, а из непримитивных (объектов) копирует ссылку на объект, из-за этого, если атрибуты исходного объекта изменены, это повлияет на клонированные объекты.
- Глубокое копирование. Глубокое копирование создает отдельно выделенные объекты, здесь исходные объекты и скопированные объекты не зависят друг от друга.
Вот Пример реализации шаблона прототипа
Шаблон строителя
Когда разработчики создают объекты Java, конструкция объекта может иметь несколько состояний и зависеть от входных данных и переменных, в то время есть два простых решения: одно — создать несколько конструкторов или передать «нулевые» значения для неприменимых переменных, а также телескопический конструктор, где один конструктор вызывает связанный с ним другой конструктор для передачи переменной и создания объектов.
//Telescopic Constructors public PremiumUser(String firstName, String lastName){ this.firstName = firstName; this.lastName = lastName; } public PremiumUser(String id, String firstName, String lastName){ this(firstName, lastName); this.id = id; } public PremiumUser(String id, String firstName, String lastName, boolean isActive){ this(id, firstName, lastName); this.isActive = isActive; }
Хотя это решает проблему, которая не является хорошей практикой программирования.
Шаблон Builder решает эту проблему, предоставляя класс Builder, и ему не нужно беспокоиться о конструкторе, используемом при инициализации объекта.
Вот пример реализации шаблона Builder.
Абстрактный заводской узор
Шаблон «Абстрактная фабрика» похож на шаблон проектирования «Фабричный метод», который следует принципу «Программируйте интерфейс, а не реализацию». Но различие между фабричным методом и абстрактной фабрикой заключается в том, что фабричный метод предоставляет определенный метод для создания соответствующего объекта, а абстрактный фабричный шаблон предоставляет интерфейс для создания семейств объектов путем реализации интерфейс.
Вот пример реализации шаблона абстрактной фабрики.
В следующей статье давайте узнаем о структурных паттернах. И найдите полный репозиторий шаблонов проектирования на Java.
Для получения дополнительной информации найдите учебник, установленный ниже.