У меня есть объект EggSac, который содержит ссылки на> 100 000 объектов Egg. Некоторые переменные в яйцах должны поддерживаться в соответствии с EggSac, поэтому я хочу, чтобы их можно было изменять только в EggSac. Однако EggSac передает ссылки на свои Eggs по всему приложению, поэтому, если я использую открытые методы, любой другой код может случайно изменить защищенные части Eggs.
Какой правильный ОО-способ убедиться, что только объект EggSac может вызывать «безопасные» методы Eggs, но при этом сделать «безопасные» методы доступными для всех?
Моя идея состоит в том, чтобы разделить класс Egg на базовый класс, содержащий только безопасные методы, и производный класс, содержащий безопасные методы, к которым должен иметь доступ только EggSac. Затем у EggSac есть члены типа производного класса, но он преобразует их в свой базовый класс всякий раз, когда кто-то еще этого хочет.