Заміна посилання значенням
Проблема
У вас є об’єкт-посилання, який занадто маленький і незмінний, щоб виправдати складнощі по управлінню його життєвим циклом.
Рішення
Перетворіть його на об’єкт-значення.


Причини рефакторингу
Спонукати до переходу від посилання до значення можуть незручності, які виникають при роботі з об’єктом-посиланням.
Об’єктами-посиланнями необхідно якимось чином управляти:
- 
кожного разу доводиться просити в об’єкта-сховища потрібний об’єкт; 
- 
посилання в пам’яті теж можуть виявитися незручними в роботі; 
- 
працювати з об’єктами-посиланнями, на відміну від об’єктів-значень, особливо складно в розподілених і паралельних системах. 
Крім того, об’єкти-значення будуть особливо корисні, якщо вам більше потрібна незмінність об’єктів, ніж можливість зміни їх стану під час життя об’єкта.
Переваги
- 
Важлива властивість об’єктів-значень полягає в тому, що вони мають бути незмінними. При кожному запиті, що повертає значення одного з них, повинен виходити однаковий результат. Якщо це так, то не виникає проблем за наявності багатьох об’єктів, що представляють одну і ту ж річ. 
- 
Об’єкти-значення набагато простіші в реалізації. 
Недоліки
- Якщо значення може змінюватись, вам необхідно забезпечити, щоби при зміні будь-якого з об’єктів оновлювалися значення в усіх інших, які представляють ту ж саму річ. Це настільки обтяжливо, що простіше для цього створити об’єкт-посилання.
Порядок рефакторингу
- 
Забезпечте незмінність об’єкта. Об’єкт не повинен мати сеттерів або інших методів, що міняють його стан і дані (у цьому може допомогти видалення сеттера). Єдиним місцем, де полям об’єкта-значення присвоюються якісь дані, має бути конструктор. 
- 
Створіть метод порівняння для того, щоби мати можливість порівняти два об’єкти-значення. 
- 
Перевірте, чи можливо видалити фабричний метод і зробити конструктор об’єкта публічним.