7 найважливіших моделей дизайну програмного забезпечення

Щоб детально заглибитись у тему "Шаблони дизайну програмного забезпечення", перегляньте шаблони дизайну програмного забезпечення: кращі практики для розробників, створені C.H. Afzal, інженер програмного забезпечення ветерана з багаторічним досвідом роботи в Netflix, Microsoft та Oracle. Значна частина нижче підсумована з його курсу.

Чому шаблони дизайну?

Шаблони дизайну стали предметом суперечок у світі програмування останнім часом, значною мірою через сприйняття «надмірного використання», що призводить до коду, який важче зрозуміти та керувати ним.

Важливо розуміти, що шаблони дизайну ніколи не мали зловлювати ярлики разом, щоб їх застосовувати ненавмисно, "one-size-fit-all" до вашого коду. У кінцевому підсумку не існує заміни справжньої здатності вирішити проблеми в інженерії програмного забезпечення.

Однак залишається фактом, що шаблони дизайну можуть бути неймовірно корисними, якщо їх використовувати в правильних ситуаціях та з правильних причин. Якщо вони використовуються стратегічно, вони можуть зробити програміста значно ефективнішим, дозволяючи їм уникати винахідництва прислівного колеса, замість цього використовуючи вдосконалені іншими методами. Вони також надають корисну загальну мову для концептуалізації повторних проблем та рішень під час обговорення з іншими чи управління кодом у більших командах.

Однак, важливим застереженням є те, щоб розробник розумів, як і чому за кожною схемою також розуміти.

Без подальшої приналежності (у загальному порядку важливості, від більшості до найменших):

Найважливіші моделі дизайну

  1. Сінглтон

Однотонний візерунок використовується для обмеження створення класу лише одним об'єктом. Це вигідно, коли для координації дій у системі потрібен один (і лише один) об'єкт. Є кілька прикладів, коли має існувати лише один екземпляр класу, включаючи кеші, пули потоків та регістри.

Ініціювати об’єкт класу тривіально, але як ми можемо створити коли-небудь створений лише один об’єкт? Відповідь - зробити конструктор "приватним" для класу, який ми маємо намір визначити як однотонний. Таким чином, лише члени класу можуть отримати доступ до приватного конструктора і ніхто більше.

Важливе враження. Підкласинг синглів можна підкласирувати, зробивши конструктор захищеним замість приватного. Це може бути доречно за деяких обставин. Один із підходів, застосованих у цих сценаріях, полягає у створенні реєстру одинакових підкласів, і метод getInstance може взяти параметр або використовувати змінну середовища для повернення потрібного сингтона. Потім реєстр підтримує відображення імен рядків до однотонних об'єктів, до яких можна отримати доступ за необхідності.

2. Фабричний метод

Звичайна фабрика виробляє товари; фабрика програмного забезпечення виробляє об'єкти. І не тільки це - це робиться без уточнення точного класу об'єкта, який потрібно створити. Для цього об’єкти створюються шляхом виклику заводського методу замість виклику конструктора.

Зазвичай створення об’єктів на Java відбувається так:

SomeClass someClassObject = новий SomeClass ();

Проблема вищезгаданого підходу полягає в тому, що код, що використовує об'єкт SomeClass, раптом тепер стає залежним від конкретної реалізації SomeClass. Немає нічого поганого в тому, щоб використовувати нові для створення об’єктів, але це багаж, який щільно з'єднує наш код з конкретним класом реалізації, що може бути проблематично.

3. Стратегія

Шаблон стратегії дозволяє групувати пов'язані алгоритми під абстракцією, що дозволяє вимикати один алгоритм або політику за іншим без зміни клієнта. Замість того, щоб безпосередньо реалізувати один алгоритм, код отримує інструкції для виконання, вказуючи, яку з групи алгоритмів запустити.

4. Спостерігач

Ця закономірність є залежною від багатьох об'єктів, так що коли один об'єкт змінює стан, усі його залежні сповіщаються. Зазвичай це робиться шляхом виклику одного з їх методів.

Для простоти подумайте, що станеться, коли ви стежите за ким-небудь у Twitter. Ви по суті просите Twitter надіслати вам (спостерігачеві) твіт оновлення людини (суб'єкта), за яким ви стежили. Шаблон складається з двох акторів, спостерігача, який цікавиться оновленнями, і суб'єкта, який генерує оновлення.

У суб'єкта може бути багато спостерігачів і це відносини один до багатьох. Однак спостерігач може також передплачувати оновлення інших предметів. Ви можете підписатися на стрічку новин зі сторінки Facebook, яка буде темою, і кожного разу, коли на сторінці з’явиться нова публікація, підписчик побачить нову публікацію.

Ключове значення: Якщо багато суб'єктів і мало спостерігачів, якщо кожен суб'єкт зберігає своїх спостерігачів окремо, це збільшить витрати на зберігання, оскільки деякі суб'єкти будуть зберігати одного і того ж спостерігача кілька разів.

5. Будівельник

Як випливає з назви, для побудови об'єктів використовується модель для побудови. Іноді об’єкти, які ми створюємо, можуть бути складними, складеними з декількох суб’єктів або вимагати складного процесу побудови. Вправу створення складних типів можна спростити за допомогою шаблону будівельника. Композитний або сукупний об’єкт - це те, що зазвичай будує будівельник.

Основний розгляд: модель конструктора може здатися схожою на "абстрактний заводський" шаблон, але одна відмінність полягає в тому, що модель конструктора створює об'єкт поетапно, тоді як абстрактний заводський шаблон повертає об'єкт за один раз.

6. Перехідник

Це дозволяє сумісним класам працювати разом, перетворюючи інтерфейс одного класу в інший. Подумайте про це як про свого перекладача: коли зустрічаються два глави держав, які не розмовляють спільною мовою, зазвичай перекладач сидить між ними та перекладає розмову, таким чином, забезпечуючи спілкування.

Якщо у вас є два додатки, причому одне виплює вихід у вигляді XML, а інше вимагає введення JSON, тоді вам знадобиться адаптер між двома, щоб вони безперебійно працювали.

7. Держава

Шаблон стану інкапсулює різні стани, в яких може знаходитися машина, і дозволяє об’єкту змінювати свою поведінку, коли його внутрішній стан змінюється. Машина або контекст, як його називають у зразковому мовленні, можуть вчинити на ньому дії, які приводять його в різні стани. Без використання шаблону код стає негнучким і засміченим умовами if-else.

Хочете продовжувати вчитися?

Що стосується шаблонів дизайну програмного забезпечення: найкращі практики для розробників, ви матимете шанс зробити більше, ніж просто прочитати теорію. Ви зможете зануритися в глибину реальних проблем і зрозуміти практичні рішення на прикладі реального коду.

Курс заснований на популярній книзі «Банди чотирьох», але представленій в інтерактивному, легко засвоюваному форматі. Ви інтерактивно освоїте 23 відомих шаблони дизайну з книги, навчитеся правильним застосуванням 3-х основних типів шаблону дизайну (творчого, структурного та поведінкового) та навчитесь включати ці дизайнерські зразки у власні проекти.

Перевірте це зараз.

Оригінально опубліковано на blog.educative.io 7 листопада 2018 року.