abstract Factory Demo