нельзя никак останавливаться, и у него на всякий случай есть резервный мотор. И вот первый мотор приказал долго жить и заклинил. Мотор1 и Мотор2 являются членами станка. Но если сам станок то знает, что у него есть эти два мотора, то (если я не ошибаюсь) каждый мотор имеет доступ только к this самого себя любимого ( то есть мотор1 не может просто так взять и залезть внутрь мотора2). И вот вопрос, как в методе мотора1 запустить соседний Мотор2? Оба находятся в одном станке. Станок запустили и по умолчанию включился первый мотор, если он клинанул, надо чтоб первый мотор сразу запустил второй мотор.
struct Motor
{
bool is_working = false;
// если этот мотор заклинило и надо запустить резервный второй мотор,
// то как к нему можно обратиться из метода start() заклинившего мотора?
void start() { if ( !is_working ) // как тут запустить второй мотор? }
};
struct Stanok
{
Motor motor1;
Motor motor2;
void run_stanok() { motor1.start(); }
};
int main()
{
Stanok stanok;
stanok.run_stanok();
return 0;
}
почему бы в самом станке не прописать переключение мотора? по факту моторы сами по себе не будут знать о наличии друг друга
поломка мотора1 должна приводить не к запуску мотора2, а к событию "мотор1 сломался", на основании которого управляющий модуль, знающий обо всех моторах, принимает решение о запуске мотора2 так называемая шина событий
хранить состояние мотора в станке, если мотор говорит что он устал, станок включает второй
Если один мотор включает другой, то нарушается первый принцип из SOLID (если не путаю).
можно условный shared_ptr сделать, и передать его в оба мотора. Тогда первый мотор сможет передать свое состояние сразу второму, но это если ими обоими владеет станок (создаёт)
https://hsto.org/r/w1560/getpro/habr/post_images/07b/979/ed5/07b979ed5db74fcec05254aadb60220d.png
Это наглядное объяснение single responsibility?
Это картинка из статьи https://habr.com/ru/articles/454290/ про SRP как раз
Обсуждают сегодня