Я использую Java. Я хочу иметь метод установки одного класса, который доступен только для «владеющего» объекта другого класса. Я буду более конкретным:
У меня есть интерфейсы Node и Port. Каждый узел имеет набор портов, и каждый порт принадлежит одному узлу. Порт может быть включен или отключен, обрабатывается с помощью простого логического свойства. Однако я хочу только разрешить узлу, который «владеет» портом, устанавливать его свойство enable / disabled. Это должно происходить при вызове Node.fixYourPorts () (ОК, у него другое имя, но я пытаюсь упростить).
Итак, я хочу, чтобы все могли вызывать port.isEnabled (), но только узел-владелец должен вызывать port.setEnabled ().
Я могу придумать несколько способов сделать это, но я не уверен, что лучше, и меня беспокоит, что я могу думать об этой проблеме неправильно. Идеи до сих пор:
Каждой реализации Node потребуется соответствующая реализация Port в том же пакете, а PortImpl.setEnabled () будет иметь пакетный доступ. Не гарантирует, что один узел не изменит порты другого узла, но это достаточно близко для меня. Код Node находится под моим большим контролем, чем любой случайный клиентский код, который может получить экземпляр порта.
Вместо программирования на интерфейсный порт, программируйте на абстрактный базовый класс, AbstractPort, который является статическим вложенным классом внутри интерфейсного узла. Этот базовый класс будет предоставлять метод установки, поэтому реализации Node могут его вызывать. Не уверен, что это сработает.
Напишите еще один слой кода поверх всего этого, через который клиент не сможет пробиться. Добавьте setEnabled в интерфейс порта. Слой кода сверху будет гарантировать, что установщик не выставлен.
Добавьте установщик в интерфейс. Если вы как клиент включаете или отключаете порт самостоятельно, то вам нужно быть готовым к тому, что все будет работать некорректно. Добавить комментарий к этому эффекту.
Все это осложняется тем фактом, что реализации Node и Port будут сохранены в БД с использованием Hibernate.
Любая помощь?