add design pattern: Adapter