implement component interface