Шаблоны дизайна Kotlin стали проще | Творческие шаблоны

Продвижение языка программирования всегда сложно. Вам требовался опыт и набор навыков для продвижения языка программирования. Изучение структуры данных и шаблонов ее проектирования — это лишь немногие из многих аспектов совершенствования навыков.
У меня есть предварительные знания Kotlin. Однако недавно я снова начал кодить на Котлине. Поэтому я решил изучить шаблоны проектирования в Kotlin, которые могут помочь мне продвинуться в кодировании. Я прочитал несколько статей и просмотрел учебные пособия, чтобы придумать несколько приведенных ниже шаблонов проектирования.
Примечание. В этой статье не рассматриваются теория, преимущества и недостатки шаблона проектирования. В этой статье рассказывается только о том, как использовать эти шаблоны проектирования в реальных задачах кодирования. Я попытался перечислить несколько справочных статей. Не стесняйтесь добавлять больше в комментариях.

Введение

Шаблоны проектирования — это повторно используемый код для решения некоторых распространенных проблем. Это мое определение. Если вы заметили здесь, мы говорим о повторно используемом коде, который можно использовать снова и снова для решения общей проблемы. Добавление этого фрагмента кода может показаться написанием дополнительного кода. Однако в долгосрочной перспективе это уменьшает код проекта и количество ошибок, вызванных повторяющимся избыточным кодом.

Классификации

Шаблон проектирования можно разделить на три подкатегории.

  1. Creational Patterns: Как можно создать объект класса
  2. Структурные узоры: как собрать из лего корабль (аналогия)
  3. Поведенческие паттерны: как общаться с объектом

В каждой подкатегории есть множество шаблонов проектирования. Мы не будем охватывать их все. В этой статье я постараюсь охватить несколько основных шаблонов Creation в Kotlin.

1. Шаблон строителя

Шаблон построителя — это альтернативный способ создания сложного объекта. Давайте разберемся на данном примере. Давайте создадим программное обеспечение для автомобильного дилера.

Выход:

Car{type='Ford', model='Focus', color='red', speed=0}
Car{type='Toyota', model='Auris', color='blue', speed=0}
Car{type='Volkswagen', model='Golf', color='green', speed=0}

Данный пример находится на Java. В приведенном выше примере есть класс Car, который предоставляет несколько свойств, таких как тип, модель, цвет и скорость. Что, если мы хотим создать автомобиль со скоростью по умолчанию (10) и цветом (черный). Приходится модифицировать и добавлять несколько перегруженных конструкторов. И это также известно как задача телескопического конструктора.

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

Если вы запустите приведенный выше код, вы получите результат, аналогичный перегруженному коду конструктора. Этот код может выглядеть многословным. Однако этот код решает множество проблем, таких как неизменяемость, читабельность, простота использования.

Теперь вы можете задать вопрос, что я думал, что эта статья начинается с шаблонов проектирования в Kotlin. Но я не увидел здесь ни строчки кода Kotlin. Мой ответ будет, пожалуйста, будьте терпеливы.

Если нам нужно написать приведенный выше код на Kotlin.

Выход:

CarKt(type='Ford', model='Focus', color='red', speed=100)
CarKt(type='Toyota', model='Auris', color='blue', speed=10)
CarKt(type='Volkswagen', model='Golf', color='black', speed=10)

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

2. Одноэлементный шаблон

Singleton Pattern гарантирует, что в данном приложении должен быть только один экземпляр класса. Шаблоны Singleton в основном используются для создания конфигураций, подобных объектам в приложении. Я не буду подробно объяснять, как шаблон построителя. Кроме того, существует множество вариантов шаблона Singleton. Вы можете прочитать больше здесь, в singleton-design-pattern-in-java/. Вот пример кода для реализации Java

Здесь, в приведенном выше примере, мы проверяем экземпляр приложения LazySingleton. Приведенный выше код также обрабатывает и работает в приложении на основе потоков.

Если вам нужно реализовать тот же код в Kotlin. Код будет следующим

В Kotlin нет статического ключевого слова. Чтобы создать статический метод, вам нужно создать сопутствующий объект. Чтобы узнать больше о сопутствующих объектах, см. object-declarations.html#companion-objects.

Чтобы создать одноэлементный объект, вам не нужно следовать тому же шаблону в Kotlin, что и в Java. Kotlin предоставляет вам гораздо более простой способ создания одноэлементного класса. Он называется класс объекта.

3. Заводской узор

Фабричный шаблон имеет дело с созданием подкласса на основе факторов/условий. Вы можете думать, что фабричный класс — это класс, который предоставляет вспомогательные методы для создания и организации объекта на основе параметров и возвращает конкретный объект подкласса. Давайте посмотрим на реализацию CarFactory на Java.

Примечание. Пример кода взят из implementing-factory-design-pattern-in-java/

В приведенном выше примере вы можете видеть, что CarFactory имеет вспомогательный метод, который помогает создать автомобиль. Вариантов фабричного шаблона больше. Вы также можете использовать шаблон factory вместо шаблона Builder. Там вы создадите сложный объект, используя фабричные методы.

Тот же код можно написать на Kotlin, как показано ниже.

4. Абстрактная фабрика

Абстрактный заводской шаблон — это еще один уровень абстракции над заводским шаблоном. Шаблон Abstract Factory позволяет коду создавать различные вспомогательные классы Factory на основе некоторой внешней конфигурации или настроек. Я не буду вдаваться в подробности. Вы можете прочитать об абстрактном фабричном шаблоне здесь abstract-factory-pattern-in-java/.

Заключение

Как мы видим, существует множество моделей и вариаций. Каждый шаблон полезен для разных вариантов использования. В то же время очень сложно охватить все паттерны в одной статье. Поэтому я решил разбить на несколько статей. Надеюсь, вам понравилась эта статья, и надеюсь, что она поможет вам в повседневном программировании.

Ссылки:

  1. https://howtodoinjava.com/gang-of-four-java-design-patterns/
  2. https://en.wikipedia.org/wiki/Software_design_pattern
  3. https://www.baeldung.com/java-классы-объекты
  4. https://www.javatpoint.com/constructor-overloading-in-java
  5. http://www.javabyexamples.com/telescoping-constructor-in-java
  6. https://kotlin-quick-reference.com/102a-R-constructors-default-values.html
  7. https://kotlinlang.org/docs/object-declarations.html#companion-objects