«Создание поля класса/свойства private» - это одна из лучших практик в ООП. Чтобы получить доступ к полю private
, мы можем использовать общедоступный метод getter. Но только для записи метода getter может быть недостаточно в соответствии с this blog(Please see Quote 2). Он предлагает вернуть клон поля/свойства (если он является ссылочным типом) из метода getter. Следуя этому подходу, мы можем сделать поле/свойство немодифицируемым. Пожалуйста, смотрите ниже код -Наилучшее приближение возвращаемого значения от метода «getter»
public class Department{
Employee admin;
...
...
...
public Employee getAdmin(){
return admin.clone();
}
}
Так что теперь в 'admin'
является неизменяемым внешним миром, если мы не используем сеттер. Этот подход выглядит довольно неплохо. Но я почти не нашел кода, который реализует этот подход. Существуют ли какие-либо недостатки в использовании этого подхода, которые могут испортить преимущество использования этого подхода?
Спасибо заранее.
Лучшая практика, чтобы избежать поглотитель вообще, если это возможно;) в 99% случаев, это возможно в отношении закона Деметры при работе с объектами предметной области. – Mik378
Ну, лучший подход (по возможности) - использовать неизменяемые типы - тогда нет необходимости клонировать что-либо ... –
@ Mik378: Я думаю, что это слишком широко, лично. Существует много случаев, когда тип * не должен * знать все, что может быть сделано с его составными частями, а обнародование данных упрощает жизнь. Разве разоблачение администратором ведомства каким-либо образом нарушает инкапсуляцию? Для меня это не похоже. –