В перепитиях разработки, особенно в таких областях, как создание игр, мы часто сталкиваемся с повторяющимися проблемами. Как граммотно управлять изменениями состояния? Как объектам обмениваться данными, не становясь безнадежно запутанными? Как создавать семейства связанных объектов, не указывая их конкретные классы? Ответы, отточенные десятилетиями…