Added GUI stuffs using abstract factory pattern