Мне нравится подход, показанный в ответах Романа Двоскина и Джонатана Аллена в этой теме. Когда я впервые изучил эту технику, я воспользовался этой записью в блоге , которая дает больше объяснений по поводу этой техники. И чтобы увидеть все в контексте, здесь весь исходный код для класса, о котором говорит автор в своем сообщении в блоге.