Add Factory Pattern , Adapter pattern