added button factory
added Test
moved dependant responsibility to GUI