Однак, якщо ви довіряєте, що Принцип заміщення Ліскова буде дотримуватися, то чому б ви не дозволили його скасувати?
Наприклад, тому, що я хочу, щоб реалізація алгоритму в скелеті була виправлена, і я дозволяю лише певним частинам визначати (пере) визначати підкласи. Це широко відоме як шаблон методу шаблонів (акцент нижче)
Таким чином, шаблонний метод управляє більшою картиною семантики завдань та більш досконалими деталями реалізації вибору та послідовності методів. Ця велика картина називає абстрактні та не абстрактні методи для заданого завдання. Неабстрактні методи повністю контролюються методом шаблону, але абстрактні методи, реалізовані в підкласах, забезпечують виразну силу та ступінь свободи. Деякі або всі абстрактні методи можуть бути спеціалізовані на підкласі, дозволяючи автору підкласу надавати особливу поведінку з мінімальними модифікаціями більшої семантики. Метод шаблону (який не є абстрактним) залишається незмінним у цій схемі, гарантуючи, що підпорядковані не абстрактні методи та абстрактні методи називаються в спочатку призначеній послідовності.
Оновлення
Деякі конкретні приклади проектів, над якими я працював:
- спілкування зі застарілою системою мейнфрейму через різні "екрани". Кожен екран має купу полів із фіксованим іменем, положенням і довжиною, що містять конкретні біти даних. Запит заповнює певні поля конкретними даними. Відповідь повертає дані в одному або декількох інших полях. Кожна транзакція дотримується тієї ж основної логіки, але деталі різні на кожному екрані. Ми використовували метод шаблону в декількох різних проектах для реалізації фіксованого скелета логіки обробки екрана, дозволяючи підкласам визначати деталі, характерні для екрана.
- експорт / імпорт даних конфігурації в таблиці БД до / з файлів Excel. Знову ж таки, основна схема обробки файлу Excel та вставки / оновлення записів БД або скидання записів у Excel однакова для кожної таблиці, але деталі кожної таблиці різні. Тож метод шаблонів - це дуже очевидний вибір для усунення дублювання коду та полегшення коду для розуміння та обслуговування.
- Створення PDF-документів. Кожен документ має однакову структуру, але їх зміст щоразу різний, залежно від безлічі факторів. Знову ж таки, метод шаблону дозволяє легко відокремити нерухомий скелет алгоритму генерації від конкретних змінних деталей, що залежать від конкретного випадку. Насправді. він навіть застосовується на кількох рівнях тут, оскільки документ складається з декількох розділів , кожен з яких складається з нуля або більше полів . Тут застосовується метод шаблону на 3 різних рівнях.
У перших двох випадках оригінальна реалізована застаріла реалізація використовувала стратегію , в результаті чого багато дублювали код, який, звичайно, роками тут і там зростав непомітні відмінності, містив безліч дублюваних або трохи інших помилок, і було дуже важко підтримувати. Рефакторинг на метод шаблонів (та деякі інші вдосконалення, наприклад використання анотацій Java) зменшив розмір коду приблизно на 40-70%.
Це лише найсвіжіші приклади, які приходять мені на думку. Я міг би навести більше випадків майже з кожного проекту, над яким я працював до цього часу.