Из того, что сказал yetapb, вы можете иметь два или более объекта-адаптера, которые реализуют один и тот же интерфейс.Таким образом, когда вы вызываете SomeMethod, который возвращает объект, требующий полей (A, B, C, D), вы передаете его одному объекту адаптера.Когда вы вызываете SomeOtherMethod, для которого требуются поля (B, F, G, Q), вы создаете экземпляр другого класса адаптера.
Если оба они реализуют общий interce, вы можете поместить что-то вроде метода IsValid в интерфейси ссылаться на интерфейс локально в вашем коде только после того, как вы проверили IsValid.Каждый класс адаптера затем реализует свою собственную логику для обязательных полей.
Локально, вы никогда не будете обращаться непосредственно к любому из предложений адаптера в вашем коде, а скорее к своему интерфейсу.
Другоетогда вы являетесь потребителем услуги - вы не можете гарантировать, что возвращаемый объект логически делает то, что вы думаете (и на некоторых уровнях вы должны программировать с защитой от этого факта), помимо контракта на эксплуатацию.Основная идея здесь заключается в том, что этот подход добавляет тонкий слой проверки объекта.