При разработке в ООП интерфейс / контракт иногда дается библиотекой, которую вы не можете изменить. Давайте назовем этот интерфейс J.
Теперь у вас есть объект класса A, который потребляет объекты, которые реализуют этот интерфейс. Внутри Необходима только небольшая часть определений интерфейса. Некоторые из классов объектов созданы мной во время проекта (давайте назовем один из них типом D), поэтому в реализации всего внутри интерфейса J. есть издержки.
Я хочу реализовать подмножество функциональных возможностей в интерфейсе J, но мои решения пока не удовлетворяют меня:
- реализация каждого аспекта J с последующим выбрасыванием «notImplementedExceptions» дезинформирует пользователя моих объектов: казалось бы, мои объекты типа D соответствуют интерфейсу J, но они - и другие потребители моих объектов (которые принимают объекты, реализующие интерфейс) J) не может полагаться на целостность моих объектов.
- Реализация нового определенного интерфейса запрещает мне использовать объекты, которые реализуют только интерфейс J, хотя интерфейс J полностью совместим с моим собственным интерфейсом.
- Разрешение моим пользовательским объектам реализовать интерфейс J создаст значительные накладные расходы, потому что им не нужны все эти функции.
Когда я смог изменить интерфейс J, я бы создал «суперинтерфейс» K, который имел бы это подмножество функциональности интерфейса J, и заставил бы интерфейс J наследовать от интерфейса K. Но я не могу изменить интерфейс J.
Что такое объектно-ориентированное решение этой проблемы? Лучшее решение все еще реализует "просто" интерфейс J? Или существуют ООП-способы «суперкласса» интерфейса без его изменения?