Если оценивать композицию, становится заметно, что эта логика не зацикливается в одном шаблоне, а меняется в каждой версии. Ниже изложен детализированный анализ. В конце даны подсказки, чтобы можно было избежать лишних шагов. Если нужно можно адаптировать эту подачу под свою задачу.
https://googlegossip.com/read-blog/104053_67-kraken-mesto-gde-vsyo-kak-nado.html