compostion实现