Base/Knowledges/IT/Рефакторинг/Методы рефакторинга/Замена суперкласса делегатом (Replace Superclass with Delegate).md
2026-02-23 19:52:05 +03:00

32 lines
1.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#рефакторинг етоды_рефакторинга
![[Pasted image 20250220083403.png]]
### **Проблема**
В интерфейсе стека присутствовали все операции списка, хотя большинство из них к стеку были не применимы.
```javascript
class List {...}
class Stack extends List {...}
```
### **Решение**
Превратить список в поле стека и делегировать ему необходимые операции.
```javascript
class Stack {
constructor() {
this._storage = new List();
}
}
class List {...}
```
### **Причины рефакторинга**
Если функции суперкласса не имеют смысла для подкласса, это признак того, что я не должен применять наследование для использования функциональности суперкласса.
### **Порядок рефакторинга**
1. Создайте в подклассе поле, которое ссылается на объект суперкласса. Инициализируйте эту ссылку делегата новым экземпляром
2. Для каждого элемента суперкласса создайте в подклассе функцию передачи, которая выполняет передачу созданной ссылке на делегата. Выполните тестирование после реализации передачи для каждой согласованной группы.
3. Когда все элементы суперкласса окажутся перекрыты передающими функциями, удалите наследование.
### **Ссылки**
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]