add adapter and bridge pattern