design pattern: adapter pattern