определение:
Структура для определения алгоритма в операции, задерживая некоторые шаги на подкласс. Это позволяет подклассу переопределить определенные конкретные шаги алгоритма без изменения структуры алгоритма.
Это звучит очень высококачественное, мое понимание:
1. Родительский класс объявляет о нескольких абстрактных методах (основные методы) и несколько конкретных методов (методы шаблона)
2. Абстрактный метод - это шаг алгоритма (процесса), который реализован в подклассе
3. Метод шаблона представляет собой алгоритм (процесс). В родительском классе было согласовано реализация вызовов к основным методам и завершению фиксированной логики.
4. Структура алгоритма (процесс) определяется в родительском классе, а конкретные данные реализации реализованы в подклассе.
Примечание. Чтобы предотвратить вредоносные операции, общий метод шаблона добавляется с помощью окончательного, а переписывание запрещено.
Общая классная диаграмма:
Фактически, метод шаблона является часто используемой шаблоном в программировании. Давайте сначала посмотрим на пример. Однажды программист А получил задачу: дайте множество целых чисел, сортируйте цифры в массиве от малого до большого, а затем распечатайте отсортированные результаты. После анализа эта задача может быть грубо разделена на две части: сортировка и печать. Функция печати легко реализовать, поэтому сортировка немного неприятна. Но у 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
Структура шаблона метода метода
Паттерн метода шаблона состоит из абстрактного класса и (или групп) классов реализации через структуры наследования. Методы в абстрактных классах разделены на три типа:
Аннотация Метод: родительский класс только объявляет, но не реализует его, но определяет спецификации, а затем реализует их подклассом.
Метод шаблона: объявлен и реализован абстрактными классами. Вообще говоря, методы шаблонов вызывают абстрактные методы для выполнения основных логических функций, а методы шаблонов в основном определяются как конечные типы, что указывает на то, что основные логические функции не могут быть переписаны в подклассах.
Метод крюка: объявлен и реализован абстрактным классом. Однако подклассы могут быть расширены, и подклассы могут влиять на логику методов шаблона путем расширения методов крючка.
Задача абстрактных классов состоит в том, чтобы создать логическую структуру, которая обычно пишет опытным персоналом, потому что качество абстрактных классов напрямую определяет, является ли программа стабильной.
Классы реализации используются для реализации деталей. Метод шаблона в абстрактных классах завершает бизнес -логику, внедряя методы расширения класса. Пока метод расширения в классе реализации проходит модульный тест, общая функция, как правило, не будет иметь серьезных ошибок в предпосылке, что метод шаблона является правильным.
Преимущества режима метода шаблона:
1. Инкапсулируйте неизменную часть и разверните переменную часть
2. Извлеките общественную часть кода для легкого обслуживания
3. Поведение контролируется родительским классом и реализуется детским классом
Применимые сценарии для режима метода шаблона:
1. Многочисленные подклассы имеют публичные методы, а логика в основном одинакова
2. Для сложных алгоритмов основной алгоритм предназначен как метод шаблона, а подробные функции реализуются каждым подклассом.
3. Рефакторинг кода
Расширение шаблона метода шаблона
Суммировать:
Родительский класс устанавливает структуру. После того, как детский класс переписывает некоторые методы родительского класса, он называет метод, унаследованный от родительского класса, чтобы получить разные результаты.