definição:
Uma estrutura para definir um algoritmo em uma operação, atrasando algumas etapas para uma subclasse. Isso permite que uma subclasse redefina certas etapas específicas de um algoritmo sem alterar a estrutura de um algoritmo.
Parece muito sofisticado, meu entendimento:
1. A classe pai declara vários métodos abstratos (métodos básicos) e vários métodos específicos (métodos de modelo)
2. O método abstrato é uma etapa de um algoritmo (processo) que é implementado em uma subclasse
3. O método do modelo é uma estrutura de algoritmo (processo). Foi acordado na classe pai para implementar chamadas para métodos básicos e completar a lógica fixa.
4. A estrutura de um algoritmo (processo) é definida na classe pai e os detalhes específicos da implementação são implementados na subclasse.
NOTA: Para evitar operações maliciosas, o método de modelo geral é adicionado com o final e a reescrita é proibida.
Diagrama de classe geral:
De fato, o método do modelo é um padrão frequentemente usado na programação. Vamos primeiro olhar para um exemplo. Um dia, o programador A obteve uma tarefa: dê uma variedade de números inteiros, classifique os números na matriz de pequeno a grande e imprimindo os resultados classificados. Após a análise, essa tarefa pode ser dividida aproximadamente em duas partes: classificação e impressão. A função de impressão é fácil de implementar, portanto, a classificação é um pouco problemática. Mas A tem uma maneira, primeiro complete a função de impressão e encontre outra pessoa para fazer a função de classificação.
Classe abstrata abstractSort { / *** Classificar a matriz de pequena a grande* @param Array* / abstrato protegido Sort (int [] matriz); public void ShowsorTResult (int [] Array) {this.sort (Array); System.out.print ("Resultado de classificação:"); for (int i = 0; i <Array.Length; i ++) {System.out.printf ("%3s", Array [i]); }}}Depois de escrever, encontrou um colega que acabara de se formar e começar a trabalhar e disse: Há uma tarefa, eu já escrevi a lógica principal, para que você possa implementar a lógica restante. Então, eu dei a classe AbstractSort para B e deixei B escrever para implementá -la. B assumiu o controle e viu. Era muito simples. Foi feito em 10 minutos. O código é o seguinte:
classe Concretesort estende abstractSort {@Override Protected void Sort (int [] Array) {for (int i = 0; i <Array.Length-1; i ++) {selectSort (Array, i); }} void privado selectSort (Int [] Array, int index) {int minValue = 32767; // variável de valor min Variável int indexmin = 0; // Variável de índice de valor mínimo int temp; // variável de encenação para (int i = index; i <array.length; i ++) {if (array [i] <minValue) {// encontre o valor mínimo minvalue = array [i]; // armazenamento o valor mínimo indexmin = i; }} Temp = array [index]; // Troque dois valores numéricos Array [index] = Array [indexmin]; Array [indexmin] = temp; }}Depois de escrevê -lo, dê a A, e um levará para executá -lo:
public class Client {public static int [] a = {10, 32, 1, 9, 5, 7, 12, 0, 4, 3}; // Matriz de dados predefinida public static void main (string [] args) {abstractSort s = new concreteSort (); s.showsortResult (A); }} Resultados em execução:
Resultados de classificação: 0 1 3 4 5 7 9 10 12 32
Estrutura do padrão de método de modelo
O padrão de método de modelo consiste em uma classe abstrata e em um (ou um grupo de) classes de implementação por meio de estruturas de herança. Os métodos nas classes abstratos são divididos em três tipos:
Método resumo: a classe pai se declara apenas, mas não a implementa, mas define as especificações e as implementa por sua subclasse.
Método do modelo: declarado e implementado por classes abstratas. De um modo geral, os métodos de modelo chamam métodos de abstratos para concluir as principais funções lógicas e os métodos de modelo são definidos principalmente como tipos finais, indicando que as principais funções lógicas não podem ser reescritas em subclasses.
Método do gancho: declarado e implementado por classe abstrata. No entanto, as subclasses podem ser estendidas e as subclasses podem afetar a lógica dos métodos de modelo, estendendo os métodos de gancho.
A tarefa das classes abstratas é construir uma estrutura lógica, que geralmente é escrita por pessoal experiente, porque a qualidade das classes abstratas determina diretamente se o programa é estável.
As classes de implementação são usadas para implementar detalhes. O método de modelo em classes abstratas completa a lógica de negócios implementando métodos de extensão de classe. Desde que o método de extensão na classe de implementação passe um teste de unidade, a função geral geralmente não terá grandes erros sob a premissa de que o método do modelo está correto.
Vantagens do modo de método de modelo:
1. Encapsular a parte inalterada e expandir a parte variável
2. Extraia parte pública do código para facilitar a manutenção
3. O comportamento é controlado pela classe pai e implementado pela classe infantil
Cenários aplicáveis para o modo de método de modelo:
1. Várias subclasses têm métodos públicos e a lógica é basicamente a mesma
2. Para algoritmos complexos, o algoritmo principal é projetado como um método de modelo e as funções detalhadas são implementadas por cada subclasse.
3. Refatoração do código
Extensão do padrão de método de modelo
Resumir:
A classe pai estabelece uma estrutura. Depois que a classe infantil reescreve alguns métodos da classe pai, ele chama o método herdado da classe pai para produzir resultados diferentes.