Q1) Звучит довольно много уроков. Хотя возможно, что каждый класс обладает определенной функциональностью, я нахожу более вероятным, что вы можете объединить некоторые из них в более общие классы. Например, вместо YellowCard и BlueCard у вас может быть просто ColorCard, где цвет является параметром.
Q2) Model View Presenter (MVP) и Model View Controller (MVC) - это два (или один, в зависимости от вашего представления) общих шаблона проектирования, которые помогают создавать графические интерфейсы, чтобы у каждого были необходимые данные.
Более конкретно, вам может не понадобиться, чтобы все карты имели ссылку на родительскую панель. Например, если у вас есть BurgerPanel, которая позволяет пользователю заказывать гамбургеры, и StatusPanel, которая показывает, сколько гамбургеров было заказано, вы можете общаться между ними следующим образом ...
Создайте объект StoreStatus и передайте его как BurgerPanel, так и StatusPanel. Когда пользователь заказывает бургер с панелью бургера, он обновляет статус магазина. Статус магазина уведомляет StatusPanel об этом обновлении через шаблон наблюдателя, и затем StatusPanel отражает изменение.
ОБНОВЛЕНИЕ: Что касается вашего конкретного примера, вы бы либо ссылались на родительский класс, либо уведомляли его об обновлениях с помощью шаблонов наблюдателя. (Преимущество шаблона наблюдателя состоит в том, что любые изменения в родительском классе не могут создавать изменения в дочерних классах.)