22. Шаблонний метод — Template method
ADO в Delphi AJAX Android C++ CakePHP CMS COM CSS Delphi Flash Flex HTML Internet Java JavaScript MySQL PHP RIA SCORM Silverlight SQL UML XML Бази даних Веб-розробка Генетичні алгоритми ГІС Гітара Дизайн Економіка Інтелектуальні СДН Колір Масаж Математика Медицина Музика Нечітка логіка ООП Патерни Подання знань Розкрутка сайту, SEO САПР Сесії в PHP Системне програмування Системний аналіз Тестологія Тестування ПЗ Фреймворки Штучний інтелект
|
22. Шаблонний метод — Template methodУявімо собі, що ми маємо розробити систему пошуку повідомлень для поштової стриньки. Процес пошуку складається із декількох операцій, які є загальними для всіх повідомлень, але специфіка методів може відрязнятися для деяких типів повідомлень. Вам слід написати клас Searcher, який буде інкапсулювати алгоритм пошуку, але ви також хочете залишити можливість перевизначити деякі елементи алгоритму для певних методів. Як це можна легко зробити? Шаблонний Метод задає покроково алгоритм, а елементи алгоритму можуть бути довизначені в похідних класах. Патерн сам по собі є досить інтуїтивним, так само як і його реалізація. Вам потрібен базовий клас, що містить основні операції і один Шаблонний Метод (Search), який буде оперувати базовими операціями. Кожна із операцій може бути перевантажена в похідному класі.
UML-діаграма 13. Шаблоний Метод Я написав тривіальну імплементацію патерну, оскільки викликаю операції одну за одною в шаблонному методі. В реальному житті, швидше за все, буде складний алгоритм, побудований на основі базових операції. І вам буде потрібно тільки перевантажити деякі із них, або, інакше кажучи, перевантажити частини алгоритму. Також можна позначити базові операції за допомогою abstract, що буде вимагати їхньої імплементації у похідних класах. Уривок коду 22.1. Клас MessagesSearcher із шаблонним методомTemplate method does some verification accordingly to search algo."); CreateImportanceCriteria(); Console.WriteLine("Template method verifies if message could be so important or useless from person provided in criteria."); Console.WriteLine(); return "Some list of messages..."; } } class ImportantMessagesSearcher : MessagesSearcher { public ImportantMessagesSearcher(DateTime dateSent, String personName) : base(dateSent, personName, 3) // «3» означає, що повідомлення важливе { } // Одна операція перевантажена (IMPORTANT в кінці) protected void createImportanceCriteria() { Console.WriteLine( "Special importance criteria has been formed: IMPORTANT"); } } class UselessMessagesSearcher : MessagesSearcher { public UselessMessagesSearcher(DateTime dateSent, String personName) : base(dateSent, personName, 1) // «1» означає, що «в пень» воно треба { } // Одна операція перевантажена (вивід відрізняється словом «USELESS» в кінці) protected void createImportanceCriteria() { Console.WriteLine("Special importance criteria has been formed: USELESS"); } }class MessagesSearcher { protected DateTime DateSent; protected String PersonName; protected int ImportanceLevel; public MessagesSearcher(DateTime dateSent, String personName, int importanceLevel) { DateSent = dateSent; PersonName = personName; ImportanceLevel = importanceLevel; } // Базові операції (primitive operations) protected void CreateDateCriteria() { Console.WriteLine("Standard date criteria has been applied."); } protected void CreateSentPersonCriteria() { Console.WriteLine("Standard person criteria has been applied."); } protected void CreateImportanceCriteria() { Console.WriteLine("Standard importance criteria has been applied."); } // Метод, який називають шаблонним public String Search() { CreateDateCriteria(); CreateSentPersonCriteria(); Console.WriteLine(" Уривок коду 22.2. Використання
MessagesSearcher searcher = new UselessMessagesSearcher(DateTime.Today, "Sally");
searcher.Search();
searcher = new ImportantMessagesSearcher(DateTime.Today, "Killer");
searcher.Search();
Вивід для першого та другого пошуку:Template method does some verification accordingly to search algo. Special importance criteria has been formed: USELESS Template method verifies if message could be so important or useless from person provided in criteria. Standard date criteria has been applied. Standard person criteria has been applied. Template method does some verification accordingly to search algo. Special importance criteria has been formed: IMPORTANT Template method verifies if message could be so important or useless from person provided in criteria.Standard date criteria has been applied. Standard person criteria has been applied.
По матеріалам книги Андрія Будая "Дизайн патерни – просто, як двері". Матеріал розміщується за домовленістю з автором.
Зверніть увагу на додаткові посиланняЯкщо вас цікавить...Головний розділСторінки, близькі за змістомзагрузка...
|
Сторінки, близькі за змістом Шаблони проектування програмного забезпечення (англ. software design patterns) — ефективні способи вирішення задач проектування програмного забезпечення. Шаблон не є закінченим зразком, який можна безпосередньо транслювати в програмний код. Об'єктно-орієнтований шаблон найчастіше є зразком вирішення проблеми і відображає відношення між класами та об'єктами, без вказівки на те, як буде зрештою реалізоване це відношення. |
Copyright © 2008—2024 Портал Знань.
При використанні матеріалів посилання, для інтернет-ресурсів — гіперпосилання, на Znannya.org обов'язкове.
Зв'язок
|
НТУУ "КПІ" Інженерія програмного забезпечення КПІ Лабораторія СЕТ |
|