---
title: "Formar Método Plantilla"
type: "refactoring-technique"
slug: "form-template-method"
url: "http://localhost:3000/es/form-template-method.md"
category: "Dealing with Generalization"
description: "Problema: Tus subclases implementan algoritmos que contienen pasos similares en el mismo orden. Solución: Mueve la estructura del algoritmo y los pasos idénticos a una superclase, y deja la implementación de los pasos diferentes en las subclases."
---
# Formar Método Plantilla

> Problema: Tus subclases implementan algoritmos que contienen pasos similares en el mismo orden. Solución: Mueve la estructura del algoritmo y los pasos idénticos a una superclase, y deja la implementación de los pasos diferentes en las subclases.

## Problem

Tus subclases implementan algoritmos que contienen pasos similares en el mismo orden.

## Solution

Mueve la estructura del algoritmo y los pasos idénticos a una superclase, y deja la implementación de los pasos diferentes en las subclases.

## Why Refactor

Las subclases se desarrollan en paralelo, a veces por personas distintas, lo que conduce a duplicación de código, errores y dificultades en el mantenimiento del código, ya que cada cambio debe realizarse en todas las subclases.

## Benefits

* La duplicación de código no siempre se refiere a casos de simple copiar/pegar. A menudo la duplicación ocurre a un nivel más alto, como cuando tienes un método para ordenar números y un método para ordenar colecciones de objetos que se diferencian únicamente en la comparación de los elementos. Crear un método plantilla elimina esta duplicación fusionando los pasos compartidos del algoritmo en una superclase y dejando solo las diferencias en las subclases.
* Formar un método plantilla es un ejemplo del _Principio de Abierto/Cerrado_ en acción. Cuando aparece una nueva versión del algoritmo, solo necesitas crear una nueva subclase; no se requieren cambios en el código existente.

## How to Refactor

1. Divide los algoritmos de las subclases en las partes que los componen, descritas en métodos separados. [Extraer Método](/es/extract-method) puede ayudar con esto.
2. Los métodos resultantes que son idénticos para todas las subclases pueden moverse a una superclase mediante [Subir Método](/es/pull-up-method).
3. A los métodos que no son similares se les pueden dar nombres consistentes mediante [Renombrar Método](/es/rename-method).
4. Mueve las firmas de los métodos no similares a una superclase como abstractas usando [Subir Método](/es/pull-up-method). Deja sus implementaciones en las subclases.
5. Y finalmente, sube el método principal del algoritmo a la superclase. Ahora debería funcionar con los pasos del método descritos en la superclase, tanto reales como abstractos.
## Relations

**Eliminates smells**

- [Código Duplicado](/es/smells/duplicate-code.md)

