Design pattern: adapter