23 шаблоны проектирования, глава 12: Режим метода шаблона Java
Определение: определяет структуру алгоритма в операции и задерживает некоторые шаги к подклассу, чтобы подкласс мог переопределить определенные конкретные шаги в алгоритме без изменения структуры алгоритма.
Тип: поведенческий паттерн
Классовая диаграмма:
Фактически, метод шаблона является часто используемой шаблоном в программировании. Давайте сначала посмотрим на пример. Однажды программист А получил задачу: дайте множество целых чисел, сортируйте цифры в массиве от малого до большого, а затем распечатайте отсортированные результаты. После анализа эта задача может быть грубо разделена на две части: сортировка и печать. Функция печати легко реализовать, поэтому сортировка немного неприятна. Но у A есть способ, сначала завершите функцию печати и найдите кого -то еще, чтобы выполнить функцию сортировки.
Abstract Class AbstractSort { / *** Сортировка массива от малого до большого* @param массив* / Защищенная абстрактная void sort (int [] массив); public void showortresult (int [] array) {this.sort (массив); System.out.print («Сортировка результата:»); for (int i = 0; i <array.length; i ++) {System.out.printf ("%3s", Array [i]); }}}После написания, нашел коллегу, который только что закончил высшее образование, начал работать и сказал: «Есть задача, я уже написал основную логику, чтобы вы могли реализовать оставшуюся логику. Поэтому я дал классу AbstractSort B и позволил B написать для его реализации. B взял это и увидел. Это было слишком просто. Это было сделано за 10 минут. Код заключается в следующем:
Class Concretesort Extends AbstractSort {@Override Protected void sort (int [] array) {for (int i = 0; i <array.length-1; i ++) {selectsort (массив, i); }} private void selectsort (int [] array, int index) {int minvalue = 32767; // мин значения переменная int indexmin = 0; // мин значения переменная int temp; // постановка переменной для (int i = index; i <array.length; i ++) {if (array [i] <minvalue) {// Найти минимальное значение minvalue = array [i]; // хранилище минимальное значение indexmin = i; }} Temp = array [index]; // поменять два численных значения массив [index] = array [indexmin]; массив [indexmin] = temp; }}После написания, дайте его, и A примет его, чтобы запустить:
Public Class Client {public static int [] a = {10, 32, 1, 9, 5, 7, 12, 0, 4, 3}; // предустановленные данные массива данных Public static void main (String [] args) {AbstractSort s = new Concetesort (); s.showsortresult (a); }} Результаты работы:
Результаты сортировки: 0 1 3 4 5 7 9 10 12 32
Он работает нормально. Хорошо, задача завершена. Правильно, это шаблон метода шаблона. Большинство выпускников, которые только что вошли в рабочее место, должны иметь опыт, аналогичный B. Сложная задача написана великими людьми в компании, а затем написать более простые методы в абстракцию и передать их другим коллегам для разработки. Это разделение труда часто используется в компаниях с относительно очевидными уровнями программистов. Например, если в проектной команде есть архитекторы, старшие инженеры и младшие инженеры, архитекторы обычно используют большое количество интерфейсов и абстрактных классов, чтобы объединить логику всей системы, и кодирование реализации передается старшим инженерам и младшим инженерам в соответствии с сложностью. Как насчет этого, вы использовали режим метода шаблона?
Структура шаблона метода метода
Паттерн метода шаблона состоит из абстрактного класса и (или групп) классов реализации через структуры наследования. Методы в абстрактных классах разделены на три типа:
Аннотация Метод: родительский класс только объявляет, но не реализует его, но определяет спецификации, а затем реализует их подклассом.
Метод шаблона: объявлен и реализован абстрактными классами. Вообще говоря, методы шаблонов вызывают абстрактные методы для выполнения основных логических функций, а методы шаблонов в основном определяются как конечные типы, что указывает на то, что основные логические функции не могут быть переписаны в подклассах.
Метод крюка: объявлен и реализован абстрактными классами. Однако подклассы могут быть расширены, и подклассы могут влиять на логику методов шаблона путем расширения методов крючка.
Задача абстрактных классов состоит в том, чтобы создать логическую структуру, которая обычно пишет опытным персоналом, потому что качество абстрактных классов напрямую определяет, является ли программа стабильной.
Классы реализации используются для реализации деталей. Метод шаблона в абстрактных классах завершает бизнес -логику, внедряя методы расширения класса. Пока метод расширения в классе реализации проходит модульный тест, общая функция, как правило, не будет иметь серьезных ошибок в предпосылке, что метод шаблона является правильным.
Преимущества и применимые сценарии метода шаблона
Легко расширить. Вообще говоря, метод шаблона в абстрактном классе - это часть, которую нелегко изменить, в то время как абстрактный метод - это часть, которую легко изменить. Следовательно, добавив класс реализации, обычно легко расширить функцию, которая соответствует принципу открытия и закрытия.
Легко поддерживать. Для режима метода шаблона это именно потому, что их основная логика такая же, как используется метод шаблона. Если метод шаблона не используется, очень неудобно поддерживать тот же код в беспорядке.
Более гибкий. Поскольку существуют методы крюка, реализация подклассов также может повлиять на работу основной логики в родительском классе. Однако, будучи гибким, поскольку подклассы влияют на родительский класс, нарушение принципа замены Рихтера также приведет к риску программы. Это ставит более высокие требования к разработке абстрактных классов.
Когда несколько подклассов имеют одинаковый метод, а методы логически одинаковы, вы можете рассмотреть возможность использования шаблона метода шаблона. Этот режим также подходит для использования программы, когда основная структура программы одинакова, а детали разные.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.