(El patrón de método de plantilla del modelo de diseño contiene un ejemplo completo de UML)

Patrón de método de plantilla de modelo de diseño

1. Patrón de método de plantilla

1.1 Definición y características

  Defina el esqueleto del algoritmo en una operación y retrase algunos pasos del algoritmo en la subclase, de modo que la subclase pueda redefinir algunos pasos específicos del algoritmo sin cambiar la estructura del algoritmo. Es un modelo de comportamiento.

  Las principales ventajas de este modelo son las siguientes:

  • Encapsula la parte sin cambios y expande la parte variable. Encapsula el algoritmo que se considera la parte invariante en la clase padre e implementa el algoritmo de la parte variable por la subclase, para que la subclase pueda continuar expandiéndose.
  • Extrae parte del código común en la clase principal para facilitar la reutilización del código.
  • Algunos subclases implementan algunos métodos, por lo que las subclases pueden agregar funciones correspondientes a través de extensiones, en línea con el principio de apertura y cierre.

  Las principales desventajas de este modelo son las siguientes:

  • Para cada implementación diferente, se debe definir una subclase, lo que conduce a un aumento en el número de clases, un sistema más grande y un diseño más abstracto.
  • El método abstracto en la clase primaria es implementado por la clase secundaria. El resultado de la ejecución de la clase secundaria afectará el resultado de la clase primaria. Esto conduce a una estructura de control inverso, lo que aumenta la dificultad de leer el código.

1.2 Estructura del modelo.

  El patrón de método de plantilla incluye los siguientes roles principales:

  (1) Clase abstracta: es responsable de dar el esquema y el esqueleto de un algoritmo. Consiste en un método de plantilla y varios métodos básicos. Las definiciones de estos métodos son las siguientes:

    Method Método de plantilla: define el esqueleto del algoritmo y llama a los métodos básicos que contiene en un cierto orden.

    ② Método básico: es un paso en todo el algoritmo, incluidos los siguientes tipos:
      Método abstracto: se declara en la clase abstracta y se implementa mediante subclases concretas.
      Método específico: se ha implementado en una clase abstracta y se puede heredar o reescribir en una subclase concreta.
      Método de gancho: se ha implementado en la clase abstracta, incluidos dos métodos lógicos para juzgar y métodos vacíos que necesitan una reescritura de subclase.

  (2) Subclase concreta (Clase concreta): implementa los métodos abstractos y los métodos de enlace definidos en la clase abstracta, que son un paso componente de una lógica de nivel superior.

1.3 Origen del problema

  En el diseño del código, definimos algunos ejemplos de procesos comerciales como procesos o formatos como plantillas (enumeradas como personas que se levantan, comen, hacen cosas y duermen todos los días), lo que permite a los usuarios actualizarlo de acuerdo con sus necesidades. En el diseño e implementación del código, el proceso general se resume en una serie de métodos, pero cada subclase reimplementa estos métodos. Esta implementación de diseño no es razonable. Al igual que en la vida, una persona se levanta, come, hace cosas, duerme, etc., todos los días, y el contenido de "hacer cosas" puede ser diferente cada día. En este momento, no es necesario volver a implementar levantarse, comer y dormir. Si todos reescriben estos cuatro métodos, no es razonable, solo es necesario volver a implementar un método.

1.4 Soluciones

  Defina algunos ejemplos de negocios como un proceso o formato como plantillas (enumeradas como personas que se levantarán, comerán, harán cosas y dormirán todos los días), permitiendo a los usuarios actualizarlo de acuerdo con sus necesidades. En el diseño e implementación del código, el proceso o plantilla general se abstrae, lo que encapsula la parte sin cambios y expande la parte variable. Encapsula el algoritmo que se considera la parte invariable en la clase primaria, e implementa el algoritmo de parte variable por la subclase, de modo que cuando la subclase específica implementa la clase primaria abstracta, la subclase implementa el algoritmo de parte variable, sin cambios. Algunos algoritmos se pueden heredar directamente para lograr el objetivo.

1.5 tipos de UML

Inserte la descripción de la imagen aquí

1.6 Solución

/**
 * @author tbb
 * 抽象人
 */
public abstract class AbstractPerson 
{
   public void eat()
   {
	   System.out.println("吃饭");
   }
   public void sleep()
   {
	   System.out.println("睡觉");
   }
   public void getUp()
   {
	   System.out.println("起床");
   }
   abstract void handleAffairs();
   
   public void templateMethod()
   {
	   eat();
	   getUp();
	   handleAffairs();
	   sleep();
   }
}
public class Student extends AbstractPerson
{

	@Override
	void handleAffairs() 
	{
		System.out.println("上课");
	}

}
public class Teacher  extends AbstractPerson
{

	@Override
	void handleAffairs() 
	{
		System.out.println("讲课");
	}

}
public class Test 
{
       public static void main(String[] args) 
       {
    	   Teacher teacher = new Teacher();
    	   teacher.templateMethod();
    	    /*
	            吃饭
				起床
				讲课
				睡觉
    	     */
    	   Student student = new Student();
    	   student.templateMethod();
    	   /*
			    吃饭
				起床
				上课
				睡觉
			*/
	   }
}
56 artículos originales publicados · Me gusta1 · Visitas1168

Supongo que te gusta

Origin blog.csdn.net/atu1111/article/details/105527094
Recomendado
Clasificación