An AVL tree usign design patterns