В своей работе (это 90% Java, но я уверен, что этот вопрос относится к другим языкам), я часто создаю два класса, которые «знают» друг о друге. Более конкретно, класс A импортирует B, а класс B импортирует класс A, и оба имеют член или локальные переменные другого типа.
Это считается плохим дизайном? Анти-шаблон, если вы будете?