Head first design pattenrs - Freeman,Eric (SPD, 2010)